Регулярное выражение для обнаружения одного и того же символа более пяти раз?


Я пытаюсь понять, как написать регулярное выражение, которое может определить, повторяется ли в моей строке какой-либо символ более пяти раз подряд? Например, он не будет обнаруживать "привет", но он будет обнаруживать "helloooooooooo".

Есть идеи?

Редактировать: Извините, чтобы уточнить, мне нужно, чтобы он обнаруживал один и тот же символ, повторяющийся более пяти раз, а не любую последовательность из пяти символов. И мне также нужно, чтобы он работал с любым уставом, а не только с буквой "о", как в моем примере. ".{5,}" не годится, потому что он просто обнаруживает любую последовательность из любых пяти символов, а не один и тот же символ.

 12
Author: alex, 2010-09-23

4 answers

Это должно сделать это

(\w)\1{5,}
  • (\w) сопоставьте любой символ и поместите его в первую группу
  • \1{5,} убедитесь, что первая группа совпадает не менее 5 раз.

Использование:

$input = 'helloooooooooo';
if (preg_match('/(\w)\1{5,}/', $input)) {
 # Successful match
} else {
 # Match attempt failed
}
 24
Author: Julien Hoarau, 2010-09-23 14:49:46

Поправка, должно быть (.)\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,}

 11
Author: eldarerathis, 2010-09-23 14:47:16

Да.

(.)\1+

Это будет соответствовать повторяющимся последовательностям любого символа.

\1 просматривает содержимое первого набора скобок. (поэтому, если у вас более сложное регулярное выражение, вам нужно будет настроить его на правильное число, чтобы оно подбирало правильный набор скобок).

Если вам нужно уточнить, скажите более трех из них:

(.)\1{3,}

Синтаксис \1 довольно мощный - например, вы также можете использовать его в другом месте вашего регулярного выражения для поиска одного и того же символа, появляющегося в разные места в строке поиска.

 1
Author: Spudley, 2010-09-23 14:46:41

Вы можете использовать регулярное выражение:

(.)\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
 0
Author: codaddict, 2010-09-23 14:45:38