我有一个字符串,我需要检查这个字符串是否至少包含两个不包含两个以上字母"O"实例的单词。我能够使用以下正则表达式模式成功地检查单个(第一个)单词的"O"要求:
^([a-np-z]*o?[a-np-z]*o?[a-np-z]*)[W]+
我将如何扩展此模式来检查后续单词,并将其应用于整个字符串的总体逻辑?
我能够用这个Regex:做到这一点
/(?:b[a-np-z]+b)|(?:b[a-np-z]*o[a-np-z]*o?[a-np-z]*b)/i
第一个括号匹配任何不包含字母"o"的单词。第二个匹配任何有一个或两个字母"o"的单词。
所以,如果你这样做:
$subject = "Testing, o, oo, ooo. Not too many triple 'o' words, here are a few: ";
$subject .= "Rosewood, Zoonosis, Morocco...";
preg_match_all("/(?:\b[a-np-z]+\b)|(?:\b[a-np-z]*o[a-np-z]*o?[a-np-z]*\b)/i", $subject, $matches);
$count = count($matches[0]);
if ($count >= 2) {
echo "Passed, found $count";
} else {
echo "Not passed, found $count";
}
// output: Passed, found 13
$matches[0]
的内容为:
print_r($matches[0]);
Array
(
[0] => Testing
[1] => o
[2] => oo
[3] => Not
[4] => too
[5] => many
[6] => triple
[7] => o
[8] => words
[9] => here
[10] => are
[11] => a
[12] => few
)
Reg(Perl):
(w*ow*ow*)+
字符串:
pero que me estas contenedoor muchacho sonr tono orco petttae tooorpedo oo
结果:
Match 1: contenedoor 18 11
Group 1: contenedoor 18 11
Match 2: tono 44 4
Group 1: tono 44 4
Match 3: orco 49 4
Group 1: orco 49 4
Match 4: tooorpedo 62 9
Group 1: tooorpedo 62 9
Match 5: oo 72 2
Group 1: oo 72 2
所以现在你不能做你的preg_match_all(pattern , input , output
)并计算输出大小,如果它大于2。http://php.net/manual/en/function.preg-match-all.php
对于带有双'o'的单个单词,它是
[^\Wo]+o[^\Wo]+o[^\Wo]+
这将排除任何外来字符和"o",匹配其他单词并停止查看"o"
对于重复实例
([^\Wo]+o[^\We]+o[^\Wo]+\W+)+