Есть ли способ сравнить обратные ссылки регулярного выражения? - PullRequest
3 голосов
/ 20 января 2011

У меня есть следующее примерное выражение, которое я передаю egrep через список слов:

^([a-z])lu([a-z])\2er$

Я хотел бы дополнительно указать, что содержимое \ 1 и \ 2 должно быть различным, например, это будет соответствовать "блефу", но не "жабру". Есть ли способ встроить это в само выражение (чтобы я мог получить свои результаты прямо из egrep или что-то вроде этого), или я застрял, делая это на каком-то реальном языке с поддержкой регулярных выражений и проверяя вручную, что ни одна из моих групп не является то же самое?

Ответы [ 2 ]

3 голосов
/ 20 января 2011

Вы можете добавить отрицательный прогноз (?!\1) перед 2-й группой матчей.Следующее регулярное выражение:

([a-z])lu(?!\1)([a-z])\2er

соответствует "bluffer", но не "blubber".Это работает правильно, только если обе группы соответствуют одинаковому количеству символов.

2 голосов
/ 20 января 2011

Вам нужно что-то более мощное.Регулярные выражения не могут отслеживать состояние. Sed , вероятно, может делать то, что вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...