将Js中的Regexp转换为PHP?

时间:2011-10-02 17:43:43

标签: php javascript regex

我在javascript中有以下正则表达式,我希望在php中具有完全相同的功能(或类似):

// -=> REGEXP - match "x bed" , "x or y bed":
var subject = query;
var myregexp1 = /(\d+) bed|(\d+) or (\d+) bed/img;
var match = myregexp1.exec(subject);
while (match != null){
    if (match[1]) {   "X => " + match[1]; }
    else{             "X => " + match[2] + " AND Y => "  + match[3]}
    match = myregexp1.exec(subject);
}

此代码在字符串中搜索匹配“x beds”或“x或y beds”的模式。 找到匹配项后,需要变量x和变量y进行进一步处理。

问题:

如何在php中构建此代码片段?

任何协助赞赏的人......

3 个答案:

答案 0 :(得分:1)

您可以使用正则表达式不变。 PCRE语法支持Javascript所做的一切。除了PHP中未使用的/g标志。相反,你有preg_match_all返回一个结果数组:

preg_match_all('/(\d+) bed|(\d+) or (\d+) bed/im', $subject, $matches, 
    PREG_SET_ORDER);
foreach ($matches as $match) {

PREG_SET_ORDER是另一个技巧,它会使$match数组与您在Javascript中获取它的方式类似。

答案 1 :(得分:1)

我在回答这些问题时发现RosettaCode非常有用。

它展示了如何用各种语言做同样的事情。正则表达式只是一个例子;他们还有文件io,排序,各种基本的东西。

答案 2 :(得分:0)

您可以使用preg_match_all( $pattern, $subject, &$matches, $flags, $offset )在字符串上运行正则表达式,然后将所有匹配项存储到数组中。

运行regexp后,可以在作为第三个参数传递的数组中找到所有匹配项。然后,您可以使用foreach迭代这些匹配。

如果不设置$flags,您的数组将具有如下结构:

$array[0] => array ( // An array of all strings that matched (e.g. "5 beds" or "8 or 9 beds" )
    0 => "5 beds",
    1 => "8 or 9 beds"
);
$array[1] => array ( // An array containing all the values between brackets (e.g. "8", or "9" )
    0 => "5",
    1 => "8",
    2 => "9"
 );

这种行为并不完全相同,我个人不太喜欢它。要将行为更改为更像“类似JavaScript”的人,请将$flags设置为PREG_SET_ORDER。您的数组现在将具有与JavaScript相同的结构。

$array[0] => array(
    0 => "5 beds", // the full match
    1 => "5", // the first value between brackets
);
$array[1] => array(
    0 => "8 or 9 beds",
    1 => "8",
    2 => "9"
);