为什么这个正则表达式找到一个简单的字符串不起作用?

时间:2014-04-26 21:03:06

标签: php regex

我试图找到一些样本字符串的匹配,但是我很惊讶它为什么不能正常工作。

这里有一些应该找到的示例字符串(&#34;&#34;&#34; turtle&#34;或&#34; fox&#34;)之间可能有任意数量的单词:< / p>

The Quick Brown Fox
The Slow Green Turtle
The Blah Blah Fox
The Blah Blah Blah Turtle

这是正在运行的正则表达式:

if(preg_match("/the \w* (fox|turtle)/i",$str)){
   echo "Match!<br>";
}

2 个答案:

答案 0 :(得分:2)

实际上是因为空间不是由\ w处理的,你希望\ w *匹配&#39; Quick Brown&#39;。 所以你可以尝试

if(preg_match("/the[\w ]*(fox|turtle)/i",$str))

匹配两个块之间的任意数量的单词。

答案 1 :(得分:0)

这是因为在狐狸或乌龟之前有两个词,而不是一个。

对于不确定数量的单词:

if ( preg_match('~\bthe(?> \w+)*? (fox|turtle)\b~i', $str) )

注意:如果你想匹配&#34;慢龟&#34;需要延迟量词*?。使用此字符串:The slow turtle and the quick fox (而不是所有句子)