Мне нужен код PHP, чтобы определить, содержит ли строка 4 или более последовательных записанных числа (от 0 до 9), например:
"one four six nine five"
или
"zero eight nine nine seven three six six"
Другой вариант:
\b(?:(?:one|two|three|four|five|six|seven|eight|nine|zero)\b\s*?){4}
Это почти то же самое, что и остальные. Единственный интересный бит - это часть \s*?
- она будет лениво сопоставлять пробелы между словами, поэтому вы не получите лишних пробелов после последовательности из 4 слов. . \b
перед этим гарантирует наличие хотя бы одного пробела (или другого разделителя после последнего слова, поэтому !a b c d!
будет соответствовать)
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];
}
РЕДАКТИРОВАТЬ:
Добавлены пробелы в регулярном выражении - спасибо Коби.
/(?:(?:^|\s)(?:one|two|three|four|five|six|seven|eight|nine|ten)(?=\s|$)){4,}/
Код PHP:
if (preg_match(...put regex here..., $stringToTestAgainst)) {
// ...
}
Примечание. В регулярное выражение можно легко добавить больше слов (например, «двенадцать»).