Spec-Zone .ru
спецификации, руководства, описания, API
|
В предыдущем разделе мы видели, как кванторы присоединяют к одному символу, символьному class, или группе фиксации за один раз. Но до сих пор, мы не обсудили понятие групп фиксации во всех подробностях.
Группы фиксации являются способом обработать многократные символы как единый блок. Они создаются, помещая символы, которые будут сгруппированы в ряде круглых скобок. Например, регулярное выражение (dog)
создает единственную группу, содержащую буквы "d" "o"
и "g"
. Часть строки ввода, которая соответствует группу фиксации, будет сохранена в памяти для более позднего отзыва через обратные ссылки (как обсуждено ниже в разделе, Обратных ссылках).
Как описано в Pattern
API, группы фиксации перечисляются, считая их вводные круглые скобки слева направо. В выражении ((A)(B(C)))
, например, есть четыре таких группы:
((A)(B(C)))
(A)
(B(C))
(C)
Чтобы узнать, сколько групп присутствует в выражении, вызовите groupCount
метод на объекте matcher. groupCount
метод возвращается int
показ числа групп фиксации, существующих в образце matcher. В этом примере, groupCount
возвратил бы число 4
, показ, что образец содержит 4 группы фиксации.
Есть также специальная группа, группа 0, который всегда представляет все выражение. Эта группа не включается в общее количество, о котором сообщают groupCount
. Начинающие группы (?
чистые, негруппы фиксации, которые не получают текст и не рассчитывают к групповому общему количеству. (Вы будете видеть примеры негрупп фиксации позже в
Важно понять, как группы перечисляются потому что некоторые Matcher
методы принимают int
определение определенного группового числа в качестве параметра:
public int start(int group)
: Возвращается запуск индексируют подпоследовательности, полученной данной группой во время предыдущей работы соответствия.public int end (int group)
public String group (int group)
Раздел строки ввода, соответствующей группе (ам) фиксации, сохраняется в памяти для более позднего отзыва через обратную ссылку. Обратная ссылка определяется в регулярном выражении как наклонная черта влево (\
) сопровождаемый цифрой, указывающей на число группы, которая будет вспомнена. Например, выражение (\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 работает точно таким же образом: Определите наклонную черту влево, сопровождаемую числом группы, чтобы быть вспомненными.