регулярное выражение для определения чисел, написанных как слова - PullRequest
7 голосов
/ 31 августа 2010

Мне нужен код PHP, чтобы определить, содержит ли строка 4 или более последовательных записанных числа (от 0 до 9), например:

"one four six nine five"

или

"zero eight nine nine seven three six six"

Ответы [ 4 ]

5 голосов
/ 31 августа 2010

Вы можете сделать это так:

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

(Рубулярный)

3 голосов
/ 31 августа 2010

Другой вариант:

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

Это почти так же, как и все остальные. Единственный интересный бит - это часть \s*?, которая будет лениво соответствовать пробелам между словами, поэтому вы не получите лишних пробелов после последовательности из 4 слов. \b перед тем, как он гарантирует, что есть хотя бы один пробел (или другой разделитель после последнего слова, поэтому !a b c d! будет соответствовать)

2 голосов
/ 31 августа 2010
/(?:(?:^|\s)(?:one|two|three|four|five|six|seven|eight|nine|ten)(?=\s|$)){4,}/

PHP-код:

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

Примечание. Дополнительные слова (например, «двенадцать») можно легко добавить в регулярное выражение.

0 голосов
/ 31 августа 2010
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];
}

РЕДАКТИРОВАТЬ:

Добавлены пробелы в регулярном выражении - благодаря Коби.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...