如何更换ereg?

Posted

技术标签:

【中文标题】如何更换ereg?【英文标题】:How to replace ereg? 【发布时间】:2011-01-14 03:24:03 【问题描述】:

我收到以下关于我必须使用但未编写的 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需要(如果我没记错的话,是不同的)......你们能帮我解决这个问题吗?

谢谢

【问题讨论】:

How can I convert ereg expressions to preg in PHP?的可能重复 【参考方案1】:

试试:

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

preg_match 中的正则表达式需要包含在一对分隔符之间,而弃用的 ereg() 函数则不是这种情况。

【讨论】:

【参考方案2】:

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

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

尝试:

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

【讨论】:

【参考方案3】:

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

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

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

所以:

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

【讨论】:

不是真正的超集(除了字符类),例如将 ABCD 上的 /AB|ABC/ 与 ERE 匹配将给出最长匹配 (ABC),但 PCRE 将给出第一个匹配 (AB)。

以上是关于如何更换ereg?的主要内容,如果未能解决你的问题,请参考以下文章

如何解决在Drupal 6.13中使用PHP 5.3.0的弃用函数ereg()

ereg()替换为preg_match(),ereg_repalce替换为preg_replace得加斜杠

PHP判断数字,汉字和英文

php 测试ereg_replace()替换eregi_replace()ereg()eregi()split()(不推荐使用php的东西)

ereg正则%00截断

ereg