2016-05-25 2 views
5

Я играл в гольф regex и идентифицировал регулярное выражение, которое охватывало все слова, которые я не должен был сопоставлять, и ни одно из слов, которые я должен сопоставить. Идея заключалась в том, что я мог просто отрицать регулярное выражение, а затем получить противоположное (охватывающее все слова, которые я должен сопоставить, и ни один из остальных).Как скрыть утверждение регулярного выражения?

Регулярное выражение я придумал (\w)(\w)\2\1 матчей ничего с рисунком abba, поэтому я думал, что с помощью отрицательного lookaround (?!(\w)(\w)\2\1) соответствовал бы мне ни с чем не шаблон abba однако теперь это только подчеркивает все, вот URL, если вы хотите try it out: http://regex.alf.nu/4

+0

Если это опция, используйте 'grep -v' –

+2

Как'^(?! \ W * (\ w) (\ w) \ 2 \ 1). * '? –

+0

@InnocentBystander это веб-интерфейс, поэтому grep не разрешен – sreya

ответ

3

Мне кажется, вы хотите исключить соответствующие строки, которые содержат эти повторяющиеся символы. Таким образом, перед символами, чтобы проверить повторение, вам нужно добавить \w* (0 или более символов слов).

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

^(?!\w*(\w)(\w)\2\1).* 
    ^^^  

См regex demo.

Итак, в окне (?!\w*(\w)(\w)\2\1) отображается следующая проверка справа в начале строки: если есть 0 + буквенно-числовые символы/символы подчеркивания, за которыми следуют 1 и 2 символа, за которыми следуют 2-й, а затем 1-й захваченные символы, нет возвращается совпадение (совпадение не выполнено).

Вам не нужна часть .*, если вы не собираетесь сопоставлять текст (т. Е. Если вы просто проверите, есть ли совпадение или нет). Однако, если вы хотите исключить сопоставление пустой строки, просто используйте .+ вместо .* (+ совпадений 1 или более вхождений количественного подшаблона).

+0

Ahhh якорь необходим, чтобы исключить пустую строку, а затем да? – sreya

+0

Нет, чтобы строка не была пустой, вы можете использовать '. +' В конце. Вы просто не уточнили, каково ожидаемое поведение для пустых совпадений. –