регулярное выражение для обнаружения чисел, написанных как слова

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

"one four six nine five" 

или

 "zero eight nine nine seven three six six" 

Related of "регулярное выражение для обнаружения чисел, написанных как слова"

Вы можете сделать это следующим образом:

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

(Rubular)

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

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

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

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

PHP-код:

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

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

 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]; } 

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

Добавлено пространство (ы) в регулярном выражении – благодаря Коби.