Regex для сопоставления строк, содержащих два любых символа, но не три - PullRequest
0 голосов
/ 02 декабря 2018

Я хочу, чтобы регулярное выражение совпадало со строками, содержащими один и тот же символ дважды (не обязательно последовательно), но не в том случае, если этот символ появляется три или более раз.

Например, учитывая эти два ввода:

abcbde
abcbdb

Первый, abcbde будет соответствовать, потому что он содержит b дважды.Тем не менее, abcbdb содержит b три раза, так что это не будет совпадать.

Я создал это регулярное выражение, однако он соответствует обоим:

(\w).*\1{1}

Я также пыталсяиспользуйте модификатор ?, однако он по-прежнему совпадает с abcbdb, чего я не хочу.

1 Ответ

0 голосов
/ 02 декабря 2018

Вам нужно две проверки: первая проверка, чтобы убедиться, что во входных данных нет символов 3 раза, и вторая проверка, чтобы найти тот, который существует 2 раза:

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

Это ужасно неэффективно по сравнению сскажем, используя ваш язык программирования для построения массива символьных частот, требующих всего 1 проход через весь ввод.Но это работает.

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