2013-07-12 3 views
1

Непосредственно из этого Java API (Ctrl + F) + «Наименование группы»:Разъяснения о регулярных выражениях захвата групп

Захваченного вход, связанный с группой всегда подпоследовательности , что группа совсем недавно совпала. Если группа оценивается второй времени из-за количественной оценки, то ее ранее зафиксированное значение, если любое, будет сохранено, если вторая оценка не удалась. Соответствующая строка «aba» против выражения (a (b)?) +, Например, оставляет группу 2, установленную в «b». Весь захваченный вход отбрасывается в начале каждого матча.

Я знаю, как работают группы захвата и как они работают с обратной референцией. Однако я не получил точку выше приведенного выше бита API. Кто-нибудь может сказать это другими словами?

Заранее спасибо.

ответ

2

Эта цитата говорит, что:

Если вы использовали квантор - +, *, ? or {m,n}, на вашей группе захвата, и ваша группа подобран более чем один раз, то только последний матч будет связан с группой захвата , и все предыдущие совпадения будут отменены.

Для т.д .: Если вы соответствуете (a)+ против строки - "aaaaaa", ваш захват группы 1 будет относиться к последнему a.

Рассмотрим теперь случай, когда у вас есть вложенная группа захвата, как в примере, приведенном в вашей цитаты:

`(a(b)?)+` 

подпадающее регулярное выражение со строкой - "aba", вы получаете следующие 2 матча:

  • "ab" - Захват группа 1 = "ab" (из-за внешние скобки), захват группы 2 = "b" (из-за внутреннюю скобку)
  • "a" - Группа захвата 1 = "a", Группа захвата 2 = Нет. (Это происходит потому, что вторая группа захвата (b)? не является обязательной. Таким образом, он успешно соответствует последнему a.

Итак, наконец, ваша Сбора группа 1 будет содержать "a", который переопределяет ранее захватили группу "ab" и захват группа 2 будет содержать . "b", который не переопределен

2

Названы захватывает или не имеет значения в данном случае

Рассмотрим этот входной текст:.

foo-bar-baz 

и это регулярное выражение:

[a-z]+(-[a-z]+)* 

Теперь вопрос, что захвачен группой 1?

Поскольку регулярное выражение прогрессирует по тексту, оно сначала соответствует -bar, которое затем является содержимым группы 1; но затем он идет в тексте и признает -baz, который в настоящее время новое содержание группы 1.

Поэтому -bar «теряется»: регулярное выражение двигатель отбрасывается, потому что дальнейший текст на входе соответствует группе захвата. Это то, что подразумевается под этим:

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