Я пытаюсь понять, как написать регулярное выражение, которое может обнаружить, если в моей строке любой символ повторяется более пяти раз подряд? Например, он не обнаружил бы «привет», но обнаружил бы «helloooooooooo».
Есть идеи?
Изменить : Извините, чтобы уточнить, мне нужно, чтобы он обнаружил тот же символ, который повторялся более пяти раз, а не последовательность из пяти символов. И мне также нужно, чтобы он работал с любым уставом, а не просто «о», как в моем примере. «. {5,}» не годится, потому что он просто определяет любую последовательность из пяти символов, а не одного и того же символа.
Это должно сделать это
(\w)\1{5,}
(\w)
соответствует любому символу и помещает его в первую группу \1{5,}
убедитесь, что первая группа соответствует не менее 5 раз. Применение :
$input = 'helloooooooooo'; if (preg_match('/(\w)\1{5,}/', $input)) { # Successful match } else { # Match attempt failed }
Исправление, должно быть (.)\1{5,}
, я верю. Виноват. Это доставит вам:
(.) #Any character \1 #The character captured by (.) {5,} #At least 5 more repetitions (total of at least 6)
Вы также можете ограничить его письмами с помощью (\w)\1{5,}
или ([a-zA-Z])\1{5,}
Ага.
(.)\1+
Это будет соответствовать повторяющимся последовательностям любого символа.
\1
просматривает содержимое первого набора скобок. (поэтому, если у вас более сложное регулярное выражение, вам нужно будет настроить его на правильный номер, чтобы он подбирал правильный набор скобок).
Если вам нужно указать, скажем, более трех из них:
(.)\1{3,}
Синтаксис \ 1 достаточно мощный – например, вы также можете использовать его в другом месте в своем регулярном выражении для поиска того же символа, который появляется в разных местах в строке поиска.
Вы можете использовать регулярное выражение:
(.)\1{5,}
Объяснение:
.
: Meta char, который соответствует любому символу. ()
: Используются для группировки и запоминания согласованного одиночного символа. \1
: обратная ссылка на единственный символ, который был запомнен в предыдущем шаге. {5,}
: Квантификатор для 5 или более и в PHP вы можете использовать его как:
$input = 'helloooooooooo'; if(preg_match('/(.)\1{5,}/',$input,$matches)) { echo "Found repeating char $matches[1] in $input"; }
Вывод:
Found repeating char o in helloooooooooo