ФорумПрограммированиеPHP для идиотов → Помогите с регулярным выражением

Помогите с регулярным выражением

  • onzone

    Сообщения: 77 Репутация: N Группа: Кто попало

    Spritz 11 мая 2010 г. 14:23

    Здравствуйте, у меня возникла проблема такого рода имеется имя файла, которое занесено в переменную, подскажите пожалуйсто, как изменить имя файла не меняя его формата.

    $target = 'file_name.avi';
    $new_name = ereg_replace ('/?/',$name_v,$filename);\\возникла идея использовать такого рода регулярное

    Я плохо разбираюсь в регулярных, как не пытался поменять имя файла до точки (file_name (.avi - формат дожен остаться неизменным)) никак не получилось :(
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 11 мая 2010 г. 14:31, спустя 8 минут 18 секунд


    $target = 'file_name.avi';
    $ext = array_pop(explode(".", $target));

    $new = $newname.".".$ext;
    Сапожник без сапог
  • VaseninM

    Сообщения: 2416 Репутация: N Группа: Адекваты

    Spritz 11 мая 2010 г. 20:50, спустя 6 часов 18 минут 56 секунд

    onzone, без регулярок делать правильнее (ибо быстрее), хотя с ними может и болеее красиво:

    preg_replace ('/[^\/\\]+(\.[a-z0-9]+)/i', $newname . '\1', $oldname);

    Вроде так.
  • mario

    Сообщения: 6067 Репутация: N Группа: Джедаи

    Spritz 11 мая 2010 г. 20:51, спустя 48 секунд

    с ними может и болеее красиво:

    Омг!
    вот красота:


    $target = 'file_name.avi';
    $ext = array_pop(explode(".", $target));

    $new = $newname.".".$ext;

  • Nyaah

    Сообщения: 574 Репутация: N Группа: Джедаи

    Spritz 11 мая 2010 г. 21:16, спустя 25 минут 20 секунд

    array_pop(explode(вся фигня)), отвратительно xD
    $filename = 'test.txt';
    $ext = pathinfo($filename, PATHINFO_EXTENSION);
    $new = $newname . '.' . $ext;
    Work, buy, consume, die
  • artoodetoo

    Сообщения: 5139 Репутация: N Группа: в ухо

    Spritz 11 мая 2010 г. 21:26, спустя 9 минут 57 секунд

    не сработает красота. array_pop() требует переменную, а не выражение. b.t.w., если мы не уверены, что расширение есть, лучше делать так:


    <?php
    error_reporting(-1);

    $oldName = 'file_name.avi';
    $newBasename = 'myname';

    $ext = strrchr($oldName, '.') or $ext = '';
    $newName = $newBasename . $ext;

    echo $newName;

    Спустя 167 сек.
    впрочем, если убрать  or $ext = '' тоже будет работать )))
    Спустя 80 сек.
    т.к. 'abc' . FALSE даёт 'abc'
    Спустя 131 сек.

    $newName = $newBasename . strrchr($oldName, '.');
    ιιlllιlllι унц-унц
  • Nyaah

    Сообщения: 574 Репутация: N Группа: Джедаи

    Spritz 11 мая 2010 г. 21:28, спустя 1 минуту 42 секунды

    $oldName = '.htaccess'
    =)
    Work, buy, consume, die
  • artoodetoo

    Сообщения: 5139 Репутация: N Группа: в ухо

    Spritz 11 мая 2010 г. 21:32, спустя 3 минуты 39 секунд

    а если нам наоборот надо поменять РАСШИРЕНИЕ (его может не оказаться вообще)

    $newName2 = basename($oldName, strrchr($oldName, '.')) . '.dat';
    Спустя 91 сек.
    Naaayh, LOL.
    ιιlllιlllι унц-унц
  • killich

    Сообщения: 270 Репутация: N Группа: Адекваты

    Spritz 11 мая 2010 г. 21:38, спустя 6 минут 32 секунды

    Братишка, самый простой способ для тебя.
    Без регулярок. Если надо - сообщи - придумаем с регулярками. Просто времени нет сейчас.

    <?php
    $target = 'file_name.avi';
    print_r(explode(".", $target));
    echo '<br />';
    ?>

    <?php
    $target = 'file_name.avi';
    // LIST берет массив и раскидывает значения по соответствующим переменным
    list($file_name, $ext) = explode(".", $target);

    echo $file_name; echo '<br />';
    echo $ext; echo '<br />';

    $new_name = 'test_name';
    $new_name = $new_name.".mp4";

    echo $new_name;
    ?>
    Рубист с большой буквы Г. Серый кардинал кулинарного блога open-cook.ru
  • artoodetoo

    Сообщения: 5139 Репутация: N Группа: в ухо

    Spritz 11 мая 2010 г. 21:50, спустя 11 минут 57 секунд

    в реале в имени файлов может быть любой количество точек, в т.ч. ни одной.
    "расширением" принято считать самый последний сегмент. kilich, в твоем примере $ext - это второй сегмент. это может быть и просто неверное расширение и даже причина вылета по ошибке - Undefined offset
    ιιlllιlllι унц-унц
  • Nyaah

    Сообщения: 574 Репутация: N Группа: Джедаи

    Spritz 11 мая 2010 г. 21:53, спустя 2 минуты 37 секунд

    не учи детей плохому =)
    list($file_name, $ext) = explode(".", $target);
    - если нет расширения, получим варнинг
    echo $file_name;    echo '<br />';
    echo $ext;      echo '<br />';
    а) нечитабельно
    б) объединение строк, с последующим выводом работает быстрее, чем последовательный вывод, здесь это не имеет значения, но всеже
    $new_name = $new_name.".mp4";
    - аяяй =) выделяем переменную, копируем в неё значение new_name конкатенируем с расширением, удаляем старое значение new_name, записываем в new_name новое значение
    Work, buy, consume, die
  • artoodetoo

    Сообщения: 5139 Репутация: N Группа: в ухо

    Spritz 11 мая 2010 г. 21:53, спустя 9 секунд

    'file_name.smth.avi'
    'file_name'
    ιιlllιlllι унц-унц
  • Nyaah

    Сообщения: 574 Репутация: N Группа: Джедаи

    Spritz 11 мая 2010 г. 21:55, спустя 2 минуты 1 секунду

    кстати да, если две точки в имени файла то будет плоха

    ахаха, оказывается поменять расширение так сложно =)
    Work, buy, consume, die
  • VaseninM

    Сообщения: 2416 Репутация: N Группа: Адекваты

    Spritz 12 мая 2010 г. 1:54, спустя 3 часа 59 минут 15 секунд

    mario, по моему красиво это когда коротко и прекрасно работает. А не когда 3 оператора на 2 строчки, да еще и не всегда работает.
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 12 мая 2010 г. 2:22, спустя 28 минут 18 секунд

    SpartakuS, слабо иф вставить?
    Сапожник без сапог

Пожалуйста, авторизуйтесь, чтобы написать комментарий!