ereg_replace to preg_replace? - PullRequest
       43

ereg_replace to preg_replace?

10 голосов
/ 15 марта 2010

Как я могу конвертировать

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

до

preg_replace... ?

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

Ответы [ 3 ]

19 голосов
/ 11 июня 2013

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

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

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

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

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

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

11 голосов
/ 15 марта 2010
preg_replace("/.*\.(.*)$/", "\\1", "foo.jpg")

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

1 голос
/ 15 марта 2010

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

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

...