我有一个字符串,我需要检查这个字符串是否包含至少两个不包含两个以上字母实例的单词" O"。我能够成功检查" O"的单个(第一个)单词。使用以下正则表达式模式的要求:
^([a-np-z]*o?[a-np-z]*o?[a-np-z]*)[\W]+
如何扩展此模式以检查后续单词,并将整体逻辑应用于整个字符串?
答案 0 :(得分:1)
我能用这个正则表达式做到这一点:
DELIMITER #
CREATE OR REPLACE PROCEDURE add_weather_data (IN temp INT)
proc_main: BEGIN
IF (temp > 20) THEN
INSERT INTO weather_data(temperature) VALUES (temp);
END IF;
END proc_main #
DELIMITER;
第一个括号匹配任何不包含字母“o”的单词。第二个匹配任何有一个或两个字母“o”的单词。
所以,如果你这样做:
/(?:\b[a-np-z]+\b)|(?:\b[a-np-z]*o[a-np-z]*o?[a-np-z]*\b)/i
$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]
答案 1 :(得分:0)
Reg(Perl):
(\w*o\w*o\w*)+
字符串:
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
答案 2 :(得分:0)
对于带有'o'的单个单词是
[^ \禾] + O [^ \禾] + O [^ \禾] +
这将排除任何外国字符和'o',匹配其他单词并停止看到'o'
重复实例
([^ \禾] + O [^ \禾] + O [^ \禾] + \ W +)+