Ereg_replace для preg_replace?

Как я могу преобразовать

ereg_replace(".*\.(.*)$","\\1",$imgfile);

к

preg_replace... ?

?

У меня проблемы с этим?

Ответ 1

preg_replace("/.*\.(.*)$/", "\\1", "foo.jpg")

Я не знаю, почему PHP требует разделителей /. Единственная причина, по которой Perl, JS и т.д. В том, что они допускают литералы регулярных выражений, чего не делает PHP.

Ответ 2

Вы должны знать 4 основных элемента для отображения шаблонов ereg в preg:

  • Добавить разделители (/): 'pattern' => '/pattern/'

  • разделитель Escape, если он является частью шаблона: 'patt/ern' => '/patt\/ern/'
    Достичь этого программно следующим образом:
    $ereg_pattern = '<div>.+</div>';
    $preg_pattern = '/' .addcslashes($ereg_pattern, '/') . '/';

  • eregi (нечувствительность к регистру): 'pattern' => '/pattern/i' Итак, если вы используете функцию eregi для соответствия case insenstive, просто добавьте 'i' в конце нового шаблона ('/pattern/').

  • Значения ASCII. В ereg, если вы используете номер в шаблоне, это предположил, что вы имеете в виду ASCII символа. Но в preg, число не рассматривается как значение ASCII. Итак, если ваш шаблон содержат значение ASCII в выражении ereg (например: новая строка, вкладки и т.д.), затем преобразуйте его в шестнадцатеричный и префикс с помощью \x.
    Example: 9(tab) becomes \x9 or alternatively use \t.

Надеюсь, это поможет.

Ответ 3

добавьте любой char в начало и конец выражения, в этом случае и по традиции символ '/' preg_replace('/.*\.(.*)$/',"\\1",$imgfile); Регулярное выражение не очень хорошо, лучше использовать strrpos и принять substr().

Regex работает медленно, используйте это. $ = Расширение зиЬзЬг ($ imgName, strrpos ($ imgName,) '');