2010-02-07 4 views
7

Я получаю следующее сообщение для некоторого PHP я должен использовать, но не писал:Как заменить ereg?

Deprecated: Function ereg() is deprecated in /opt/lampp/htdocs/webEchange/SiteWeb_V5/inc/html2fpdf.php on line 466 

Это строка 466:

if(ereg('^([^=]*)=["\']?([^"\']*)["\']?$',$v,$a3)) 

Я попытался просто заменить с preg_match, но не мог 't распознавать модификатор = в регулярном выражении. Я еще не слишком хорошо разбираюсь в регулярном выражении, и для решения этого требуется, чтобы я изучил потребности регулярного выражения и потребности regexp preg_match (что, если я не ошибаюсь, отличается) ... Могли бы вы, ребята, помочь мне с этим?

Благодаря

+0

Возможный дубликат [Как я могу преобразовать Ерег выражения PREG в PHP] (https://stackoverflow.com/questions/6270004/how-can-i-convert-ereg-expressions-to- preg-in-php) – Meloman

ответ

6

POSIX расширенных регулярных выражений (POSIX ERE, используемый ereg) и Perl-combatible регулярные выражения (PCRE, используемый preg_match) очень аналогичный. За исключением some special POSIX expressions, PCRE является надмножеством POSIX ERE.

Это означает, что вам просто нужно положить POSIX ERE регулярные выражения в delimiters (здесь /) и избежать любого появления этого символа внутри регулярного выражения и у вас есть действительный PCRE регулярное выражение:

/^([^=]*)=["']?([^"']*)["']?$/ 

Так :

preg_match('/^([^=]*)=["\']?([^"\']*)["\']?$/', $v, $a3) 
+0

Не совсем надмножество (помимо классов символов), например. совпадение '/ AB | ABC /' на 'ABCD' с ERE даст самое длинное совпадение (' ABC'), но PCRE даст первое совпадение ('AB'). – kennytm

2

Try:

if(preg_match('~^([^=]*)=["\']?([^"\']*)["\']?$~',$v,$a3)) 

Регулярное выражение в preg_match должен быть заключен между двумя разделителями, что не так с функцией осуждается EREG().

0

preg_ семья ожидает, что регулярное выражение будет разделено. Вместо того, чтобы:

'^([^=]*)=["\']?([^"\']*)["\']?$' 

попробовать:

'/^([^=]*)=["\']?([^"\']*)["\']?$/'