我有一个针对特定模式的 preg_match 匹配,但它与我尝试匹配的模式不匹配。我究竟做错了什么?
<?php
$string = "tell me about cats";
preg_match("~\b(?:tell me about|you know(?: of| about)?|what do you think(?: of| about)?|(?:what|who) is|(?:whats|whos)) ((?:[a-z]+ ){1,2})$~", $string, $match);
print_r($match);
?>
预期结果:
数组(0 => 告诉我 1 => 猫)
实际结果:
数组()
最佳答案
中有一个额外的空格(但是 cat
之后没有空格,导致整个正则表达式失败)
((?:[a-z]+ ){1,2})
^^
||
here
此外,您没有第一部分的捕获组(由于(?:..)
)。使用 ?
创建一个捕获组并将空格设为可选 (如果您想捕获最多两个单词)
\b(tell me about|you know(?: of| about)?|what do you think(?: of| about)?|(?:what|who) is|(?:whats|whos)) ((?:[a-z]+){1,2} ?)$
<强> Regex Demo
PHP 代码
$string = "tell me about cats";
preg_match("~\b(tell me about|you know(?: of| about)?|what do you think(?: of| about)?|(?:what|who) is|(?:whats|whos)) ((?:[a-z]+ ?){1,2})$~", $string, $match);
print_r($match);
注意:- $match[1]
和 $match[2]
将包含您的结果。 $match[0]
保留用于字符串中正则表达式找到的整个匹配。
<强> Ideone Demo
关于php - 使用 preg_match 来匹配此特定模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37506387/