Regex.Matches, используя lookahead, не получая совпадений - PullRequest
0 голосов
/ 16 марта 2019

У меня есть регулярное выражение

Regex.Matches(a, @"((?=.)\1+)")

Вышеупомянутое регулярное выражение должно получать совпадения без обязательных результатов захвата шаблона

Но оно не получает совпадений

С другой стороныкогда я использую его без lookahead

вот так

 Regex.Matches(a, @"(.)\1+")

Это приносит совпадения и работает нормально

Мне нравится знать, почему, почему Lookahead не выбирает совпадения.

Моя строка

   "zaaaaaaashjasjaaasjabbbajsljlsccccasjahsddddd";

вторая строка выше приносит

  [aaaaaaa],[aaa],...

Спасибо

1 Ответ

1 голос
/ 16 марта 2019

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

Когда прогноз находится в другой группе захвата, применяются те же утверждения. Lookahead ничего не потребляет, поэтому группа захвата ничего не держит.

Для захвата всего, что происходит внутри (в общем, взгляды), используйте такие группы захвата:

(?=(.))\1\1+

Это то, что вы пытаетесь сказать с помощью первого регулярного выражения.

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