Мне нужен PHP-код, чтобы определить, содержит ли строка 4 или более последовательных письменных номера (от 0 до 9), например:
"one four six nine five"
или
"zero eight nine nine seven three six six"
Вы можете сделать это следующим образом:
\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]; }
РЕДАКТИРОВАТЬ:
Добавлено пространство (ы) в регулярном выражении – благодаря Коби.