2010-08-04 3 views
3
$config['file_name'] = preg_replace('/(\.gif|\.jpg|\.png)/', '_thumb$1', $filename); 

В основном я хочу, чтобы стать filename.jpgfilename_thumb.jpgДобавить суффикс к имени файла

Я не понимаю, почему, но расширение повторяется дважды. (Filename.jpg.jpg).

Редактировать Это действительно работает, у меня есть другие проблемы в моем коде.

+0

Ваш код работает должным образом: echo preg_replace ('/ (\ .gif | \ .jpg | \ .png) /', '_thumb $ 1', 'index.gif'); ps: добавить $ в конец выражения. – zerkms

+0

См. Здесь для решения без регулярного выражения: http://stackoverflow.com/questions/2429611/regex-how-to-insert-string-before-file-extension – Matthew

ответ

5

Должно работать.

echo preg_replace('/(\.gif|\.jpg|\.png)/', '_thumb$1', "filename.jpg"); 

дает filename_thumb.jpg.

В любом случае используйте вместо этого выражение '/(\.gif|\.jpg|\.png)$/' (лучше, не используйте круглые скобки и не заменяйте $ 1 на $ 0), так что он соответствует строке только в том случае, если она находится на конце.

+0

без круглых скобок он не сможет указать $ без копировать их для каждого расширения – zerkms

+0

@zerkms Хорошая точка. Но он может использовать '(? :)' вместо этого. Нет необходимости использовать группу захвата. – Artefacto

8

Лучший способ сделать это, вероятно, будет ...

$filename_ext = pathinfo($filename, PATHINFO_EXTENSION); 

$filename = preg_replace('/^(.*)\.' . $filename_ext . '$/', '$1_thumb.' . $filename_ext, $filename); 

Я justed протестировали его с $filename = 'path/to/something.jpg'; и выход был path/to/something_thumb.jpg.

Я говорю наилучшим образом, потому что в целом с использованием встроенных функций PHP лучше. Это также позволяет всем расширениям файлов, которые может обрабатывать PHP (будучи разбиением строк, все должно быть).

+0

Что относительно расширений, которые содержат символы, имеющие смысл в регулярных выражениях? .. – Artefacto

+0

@Artefacto Правда, [но какие из них делают] (http://www.regular-expressions.info/reference.html)? Не могу придумать ни малейшей вершины моей головы ... Я уверен, что есть некоторые краевые случаи. – alex

+0

У меня уже есть проверка на то, что до этого фрагмента работает. – Keyo

Смежные вопросы