Как работают повторяющиеся дизъюнкты с обратными ссылками? - PullRequest
3 голосов
/ 08 декабря 2010

Учитывая регулярное выражение типа

(a|b){2}\1

Что будет означать \1?Первый захват, последний захват или что?

Regex.IsMatch("aba", @"^(?:(a|b){2}\1)$") == False
Regex.IsMatch("abb", @"^(?:(a|b){2}\1)$") == True

Приводит меня к подозрению, что оно соответствует последнему захвату.Я прав в этом предположении?

1 Ответ

3 голосов
/ 08 декабря 2010

Вы правильно догадались.Java тоже это делает.Большинство (если не все) движки регулярных выражений хранят последний захват для повторяющихся групп.

См. Общее описание http://www.regular -expressions.info / brackets.html # repeat .

См. http://msdn.microsoft.com/en-us/library/aa719621%28v=VS.71%29.aspx для подтверждения относительно .Net:

"[...] когда группа делает несколько захватов, обратная ссылка ссылается на самый последний захват."

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