如何取代ereg?

时间:2010-02-07 18:51:56

标签: php regex pcre posix-ere

我得到以下消息,我必须使用但不写的一些PHP:

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替换,但它无法识别正则表达式中的=修饰符。我对正则表达式不太好并且解决这个问题需要我学习regexp ereg需要和regexp preg_match需要(如果我没有记错的话,那是不同的)......你们可以帮我解决这个问题吗?

由于

3 个答案:

答案 0 :(得分:6)

POSIX扩展正则表达式(POSIX ERE,由ereg使用)和 Perl-combatible正则表达式(PCRE,由preg_match使用)非常相似。除some special POSIX expressions外,PCRE是POSIX ERE的超集。

这意味着您只需将POSIX ERE正则表达式放入delimiters(此处为/)并转义正则表达式中该字符的任何出现,并且您有一个有效的PCRE正则表达式:< / p>

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

所以:

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

答案 1 :(得分:2)

尝试:

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

preg_match中的正则表达式需要包含在一对分隔符之间,而不推荐使用的是ereg()函数。

答案 2 :(得分:0)

preg_系列期望正则表达式被分隔。而不是:

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

尝试:

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