Spec-Zone .ru
спецификации, руководства, описания, API
След: Существенные Классы
Урок: Регулярные выражения
Группы фиксации
Домашняя страница > Существенные Классы > Регулярные выражения

Группы фиксации

В предыдущем разделе мы видели, как кванторы присоединяют к одному символу, символьному class, или группе фиксации за один раз. Но до сих пор, мы не обсудили понятие групп фиксации во всех подробностях.

Группы фиксации являются способом обработать многократные символы как единый блок. Они создаются, помещая символы, которые будут сгруппированы в ряде круглых скобок. Например, регулярное выражение (dog) создает единственную группу, содержащую буквы "d" "o" и "g". Часть строки ввода, которая соответствует группу фиксации, будет сохранена в памяти для более позднего отзыва через обратные ссылки (как обсуждено ниже в разделе, Обратных ссылках).

Нумерация

Как описано в Pattern API, группы фиксации перечисляются, считая их вводные круглые скобки слева направо. В выражении ((A)(B(C))), например, есть четыре таких группы:

  1. ((A)(B(C)))
  2. (A)
  3. (B(C))
  4. (C)

Чтобы узнать, сколько групп присутствует в выражении, вызовите groupCount метод на объекте matcher. groupCount метод возвращается int показ числа групп фиксации, существующих в образце matcher. В этом примере, groupCount возвратил бы число 4, показ, что образец содержит 4 группы фиксации.

Есть также специальная группа, группа 0, который всегда представляет все выражение. Эта группа не включается в общее количество, о котором сообщают groupCount. Начинающие группы (? чистые, негруппы фиксации, которые не получают текст и не рассчитывают к групповому общему количеству. (Вы будете видеть примеры негрупп фиксации позже в Методах раздела Класса Образца.)

Важно понять, как группы перечисляются потому что некоторые Matcher методы принимают int определение определенного группового числа в качестве параметра:

Обратные ссылки

Раздел строки ввода, соответствующей группе (ам) фиксации, сохраняется в памяти для более позднего отзыва через обратную ссылку. Обратная ссылка определяется в регулярном выражении как наклонная черта влево (\) сопровождаемый цифрой, указывающей на число группы, которая будет вспомнена. Например, выражение (\d\d) определяет одну группу фиксации, соответствующую две цифры подряд, которые могут быть вспомнены позже в выражении через обратную ссылку \1.

Чтобы соответствовать любые 2 цифры, сопровождаемые теми же самыми двумя цифрами, Вы использовали бы (\d\d)\1 как регулярное выражение:

 
Enter your regex: (\d\d)\1
Enter input string to search: 1212
I found the text "1212" starting at index 0 and ending at index 4.

Если Вы измените последние две цифры, то соответствие перестанет работать:

 
Enter your regex: (\d\d)\1
Enter input string to search: 1234
No match found.

Для вложенных групп фиксации backreferencing работает точно таким же образом: Определите наклонную черту влево, сопровождаемую числом группы, чтобы быть вспомненными.


Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Кванторы
Следующая страница: Граничный Matchers