2010-06-29 78 views
1

为了PHP 5.3/6.0的兼容,我需要将一些简单的eregi正则表达式移植到preg_match在PHP中需要一些正则表达式的帮助

因为我不是在我需要一些帮助我的正则表达式移植的技能太自信了......

#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 

回答

1

你的第二个片段是几乎一样的第一,只是额外的条件。我会猜测你的实际代码(或者你希望它的工作方式)与提出的有些不同吗?如果是这样,请你详细说明这些差异吗?

无论哪种方式,您的#2可能看起来类似于#1。

if (preg_match('~bar/([^ ]*)~i', $myVar, $match) && ! preg_match('/rv:[0-9]\.[0-9]\.[0-9]/', $myVar)) { 
    $aversion = $match[1]; 
} 

采用~delimiters可能很陌生;理由是正则表达式包含最常用的分隔字符(/),所以使用替代方法而不是像在问题中那样转义斜线。

+0

#1和#2是不同(但相似)的问题。我已经移植了#1,但我不确定我的实施情况。对于#2,我需要帮助来做到这一点。 – AlexV 2010-06-29 19:53:56

+0

我当前的答案将#2转换为'preg_match'-使用与您的#1类似的代码片段(这很好)。如果你有一个特定的问题,你想解决的问题或任务,请详细说明。就目前而言,我已经完成了你似乎在问的问题。 – salathe 2010-06-29 20:04:14

+0

只是你的答案中的一个问题,我可以把任何情况下的“酒吧”(酒吧,酒吧,巴...),它会匹配(beasause〜我)? – AlexV 2010-06-29 20:24:52