Скажем, у меня есть список таких слов: мышь, abba, рев, акцент

Мне нужно регулярное выражение, которое будет соответствовать mouse и roar, но не abba или accent, потому что последние два имеют последовательные повторяющиеся символы (bb и cc).

Мне удалось придумать следующий шаблон, чтобы сопоставить только слова С двойными последовательными символами:

.*(.)\1.*

Однако мне нужно противоположное, но мне трудно его инвертировать.

4
Daniel Scocco 20 Дек 2013 в 15:15

2 ответа

Лучший ответ

Вы можете использовать это:

\b(?:([a-z])(?!\1))+\b

Он использует отрицательный просмотр вперед (?!..), который проверяет, что за каждым захватом не следует себя. Чтобы быть уверенным, что шаблон не обрезает слово перед концом слова или не начинается в середине слова, я добавил границы слова \b с каждой стороны.

По-другому:

(?![a-z]*([a-z])\1)\b[a-z]+\b
7
Casimir et Hippolyte 20 Дек 2013 в 11:29

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

^(?:(.)(?!\1))*$
4
anubhava 20 Дек 2013 в 11:19