2010-02-07 38 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,但它couldn在正则表达式中我没有认识到=修饰符。我对正则表达式还不太熟悉,解决这个问题需要我学习正则表达式ereg的需求和正则表达式preg_match的需求(如果我没有弄错,这个需求是不同的) ...你们能帮我解决这个问题吗?

由于

+0

的[?我如何转换额日格表达式在PHP中浸渍料(可能的复制https://stackoverflow.com/questions/6270004/how-can-i-convert-ereg-expressions-to- preg-in-php) – Meloman 2017-09-14 12:44:13

回答

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

不是一个超集(除了字符类),例如在'ABCD'上匹配'/ AB | ABC /'与ERE会得到最长的匹配('ABC'),但是PCRE会给出第一个匹配('AB')。 – kennytm 2010-02-07 19:12:18

2

尝试:

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

正则表达式中的preg_match需要一双分隔符,这是不与弃用EREG()功能的情况下之间,以包围。

0

preg_系列期望正则表达式被分隔。相反的:

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

尝试:

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