正则表达式,用于检测写为单词的数字

时间:2010-08-31 10:33:56

标签: php regex

我需要PHP代码来检测字符串是否包含4个或更多连续写入的数字(0到9),如:

"one four six nine five"

"zero eight nine nine seven three six six"

4 个答案:

答案 0 :(得分:5)

你可以这样做:

\b(?:(?:zero|one|two|three|four|five|six|seven|eight|nine)(?: +|$)){4}

(Rubular)

答案 1 :(得分:3)

另一种选择是:

\b(?:(?:one|two|three|four|five|six|seven|eight|nine|zero)\b\s*?){4}

这和其他几乎一样。唯一有趣的是\s*?部分 - 它会懒散地匹配单词之间的空格,所以在 4个单词的序列之后你不会得到额外的空格\b之前!a b c d!确保至少有一个空格(或最后一个单词之后的其他分隔符,因此{{1}}将匹配)

答案 2 :(得分:2)

/(?:(?:^|\s)(?:one|two|three|four|five|six|seven|eight|nine|ten)(?=\s|$)){4,}/

PHP代码:

if (preg_match(...put regex here..., $stringToTestAgainst)) {
    // ...
}

注意:可以很容易地将更多单词(例如“12”)添加到正则表达式中。

答案 3 :(得分:0)

if (preg_match("/(?:\b(?:(one)|(two)|(three)|(four)|(five)|(six)|(seven)|(eight)|(nine))\b\s*?){4,}/", $variable_to_test_against, $matches)) {
  echo "Match was found <br />";
  echo $matches[0];
}

修改

在正则表达式中添加了空格 - 感谢Kobi。