2013-12-20 2 views
4

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

мне нужно регулярное выражение, которое будет соответствовать мыши и рев, но не ABBA или акцент, потому что последний два имеют последовательные повторяющиеся символы (bb и cc).

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

.*(.)\1.* 

Однако то, что мне нужно, это наоборот, но я с трудом переворачивание.

ответ

7

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

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

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

Другой способ:

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

Большого спасибо, это работает. Я постараюсь понять это сейчас! –

+0

@ DanielS: Легко понять, когда вы помните, что просмотр - это только проверка и не является частью результата матча. –

+0

Gotcha часть о взгляде. Почему?? –

4

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

^(?:(.)(?!\1))*$ 
+0

Это не работает. –

+0

** Рабочая демонстрация: http://regex101.com/r/eE0dZ8** – anubhava

+0

Хм. По какой-то причине regexpal.com не работает. Спасибо, я проверю свою локальную машину. –

Смежные вопросы