如何在PHP中将ereg表达式转换为preg?
由于自PHP5.3.0以来就不推荐使用这些表达式,我想知道一种将旧表达式转换为的简单方法 例如,我有一个正则表达式:如何在PHP中将ereg表达式转换为preg?,php,preg-replace,preg-match,pcre,ereg,Php,Preg Replace,Preg Match,Pcre,Ereg,由于自PHP5.3.0以来就不推荐使用这些表达式,我想知道一种将旧表达式转换为的简单方法 例如,我有一个正则表达式: eregi('^hello world'); stripos($str, 'hello world') === 0 如何将表达式转换为兼容的表达式 注意:此帖子作为从ereg转换为preg的所有帖子的占位符,并作为相关问题的重复选项。请不要关闭此问题 相关: 语法中最大的变化是添加了 分隔符可以是几乎任何不是字母数字、反斜杠或空白字符的东西。通常使用最多的是~、/和
eregi('^hello world');
stripos($str, 'hello world') === 0
如何将表达式转换为兼容的表达式
注意:此帖子作为从ereg转换为preg的所有帖子的占位符,并作为相关问题的重复选项。请不要关闭此问题
相关:
语法中最大的变化是添加了 分隔符可以是几乎任何不是字母数字、反斜杠或空白字符的东西。通常使用最多的是
~
、/
和
也可以使用匹配的括号:
preg_match('[^hello]', $str);
preg_match('(^hello)', $str);
preg_match('{^hello}', $str);
// etc
如果在正则表达式中找到分隔符,则必须对其进行转义:
ereg('^/hello', $str);
preg_match('/^\/hello/', $str);
您可以使用以下命令轻松转义字符串中的所有分隔符和保留字符:
此外,PCRE还支持各种功能。最常用的一种是不区分大小写的修饰符i
,它可以替代:
您可以找到对的完整引用,以及POSIX正则表达式和PCRE之间的连接,以帮助转换表达式
但是,在您的简单示例中,您不会使用正则表达式:
eregi('^hello world');
stripos($str, 'hello world') === 0
Ereg替换为preg(从PHP5.3.0开始)是对我们有利的正确举措
preg_match使用与Perl兼容的正则表达式语法,通常是ereg更快的替代方法
您应该知道将ereg模式移植到preg的4个主要方面:“模式”=>“/pattern/”
'patt/ern'=>'/patt\/ern/'
通过以下方式编程实现:
$old_pattern='.+'代码>
$new_pattern='/'。添加睫毛($old_pattern,“/”)。/”代码>
'pattern'=>'/pattern/i'
因此,如果您使用eregi函数进行实例匹配,只需在新模式(“/pattern/”)的末尾添加“i”示例:9(制表符)变为\x9或使用\t.
从PHP 5.3版开始,
ereg
已被弃用。
从ereg
移动到preg\u match
只是我们模式中的一个小变化
首先,您必须在代码中添加分隔符,例如:
ereg('A-Z0-9a-z', 'string');
到
对于eregi
不区分大小写的匹配,将i
放在最后一个分隔符之后,例如:
eregi('pattern', 'string');
到
ereg()
和preg\u replace()
之间的区别不仅仅在于语法:
- 返回值:
- On错误:两者都返回
FALSE
- 不匹配时:
返回ereg()
,FALSE
返回preg\u match()
0
- 匹配时:
返回字符串长度或ereg()
,1
始终返回preg\u match()
1
- On错误:两者都返回
- 匹配子字符串的结果数组:如果在
中根本找不到某个子字符串(…a(b)
),则(b)
结果中的对应项将为ereg()
,而在FALSE
中则根本不会设置它preg\u match()
如果一个人没有足够的勇气将他或她的
ereg()
转换为preg_match()
,他或她可以使用,这在PHP7中仍然可用。@yes123:是的,这就是重点,我也厌倦了。我想要一篇维基文章,实际上解释了一些东西,这样我们就可以结束所有这些单独的问题。我认为没有必要这样做,因为你只需要用一个分隔符来包装旧的问题。我还认为你可以用之前回答的问题来回答这个问题。啊,在阅读评论之前投票决定结束。作为一个占位符,它可以起到一定的作用,但难道没有另一个更老的问题可以起到同样的作用吗?嗯,的确ereg[php]
不会产生很多有用的结果。好的,我可以支持这一点。伙计们,我们似乎已经在这个话题上创造了一个封闭的问题圈,所有的问题都指向对方。以这种速度,他们都会被关闭:)精彩的解释!我只想添加一个特殊情况,在这种情况下,您将从ereg转换为preg_匹配,并且只需要转义分隔符而不转义保留字符(因为它们已经作为特殊字符使用,我们不想转义它们):preg_匹配('/'.str_replace('/','\/',$expr)。'/',$str);特别值得注意的是,如果使用匹配括号,则不需要像使用其他符号(如/^\/hello/
示例)那样“仅仅因为它与分隔符相同”而转义任何字符<代码>(a(b)c)是一个完全有效的、带分隔符的PCRE。我个人喜欢用括号()
来提醒自己,第一次捕获的匹配就是全部。如何转换$正则表达式=$e'(\..[^..$e.][^.$e.]*)|(\...[^..$e.]+)|([^.][^.$e.]*)。”$e.“\.\”$E只需添加/修改器,就可以进行预计算/
preg_match('/A-Z0-9a-z/', 'string');
eregi('pattern', 'string');
preg_match ('/pattern/i', 'string');