如何更换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 测试ereg_replace()替换eregi_replace()ereg()eregi()split()(不推荐使用php的东西)