我需要将一些简单的eregi正则表达式移植到preg_match以获得PHP 5.3 / 6.0的编译。
由于我对正则表达式移植技巧不太自信,我需要一些帮助......
#1
旧版本:
if( eregi('foo',$myVar) ) {
$aresult = explode('/',stristr($myVar,'foo'));
$aversion = explode(' ',$aresult[1]);
}
新版本:
if( preg_match('/Foo\/([^ ]*)/i',$myVar,$matches) ) {
$aversion = $matches[1];
}
#2
旧版本:
if( eregi('bar',$myVar) && ! eregi('rv:[0-9]\.[0-9]\.[0-9]',$myVar)) {
$aresult = explode('/',stristr($myVar,'bar'));
$aversion = explode(' ',$aresult[1]);
}
新版本:
//Not done yet need help
答案 0 :(得分:1)
您的第二个片段与第一个片段几乎相同,只是具有额外条件。我猜你的实际代码(或者你希望它如何工作)与提出的代码有点不同?如果是这样,你能详细说明这些差异吗?
无论哪种方式,你的#2看起来都类似于#1。
if (preg_match('~bar/([^ ]*)~i', $myVar, $match) && ! preg_match('/rv:[0-9]\.[0-9]\.[0-9]/', $myVar)) {
$aversion = $match[1];
}
使用~
作为delimiters可能看起来很奇怪;原因是正则表达式包含最常用的分隔符(/
),因此使用替代方法而不是像在问题中那样转义斜杠。