正则表达式找到不超过两个字母" o"每

时间:2015-06-23 23:10:11

标签: php regex

我有一个字符串,我需要检查这个字符串是否包含至少两个不包含两个以上字母实例的单词" O"。我能够成功检查" O"的单个(第一个)单词。使用以下正则表达式模式的要求:

^([a-np-z]*o?[a-np-z]*o?[a-np-z]*)[\W]+

如何扩展此模式以检查后续单词,并将整体逻辑应用于整个字符串?

3 个答案:

答案 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 +)+