我在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中构建此代码片段?
任何协助赞赏的人......
答案 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"
);