Регулярное выражение для обнаружения одного и того же символа более пяти раз?
Я пытаюсь понять, как написать регулярное выражение, которое может определить, повторяется ли в моей строке какой-либо символ более пяти раз подряд? Например, он не будет обнаруживать "привет", но он будет обнаруживать "helloooooooooo".
Есть идеи?
Редактировать: Извините, чтобы уточнить, мне нужно, чтобы он обнаруживал один и тот же символ, повторяющийся более пяти раз, а не любую последовательность из пяти символов. И мне также нужно, чтобы он работал с любым уставом, а не только с буквой "о", как в моем примере. ".{5,}" не годится, потому что он просто обнаруживает любую последовательность из любых пяти символов, а не один и тот же символ.
4 answers
Это должно сделать это
(\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,}
Объяснение:
-
.
: Мета-символ, соответствующий любому символу. -
()
: Используются для группировки и запоминания совпадающего одиночного символа. -
\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