2015-06-08 3 views
0

У меня есть этот код ниже:Почему я получаю эти результаты от своего помощника регулярных выражений?

String content = "title = 123"; 
    Pattern p = Pattern.compile("(title)"); 
    Matcher m = p.matcher(content); 

    int i = 1; 
    while (m.find()) { 
     System.out.println("groupCount() = " + m.groupCount()); 
     System.out.println("i = " + i++ + "  found: " + m.group(0)); 
     System.out.println("i = " + i++ + "  found: " + m.group(1)); 
    } 

Выход:

groupCount() = 1 
i = 1 found: title 
i = 2 found: title 

Может кто-то пожалуйста, скажите мне, почему у меня есть 1 количество групп, а также, если я получаю правильные значения в group(0) и group(1) ?

Есть ли разница между group(0) и group(1)?

ответ

2

семян в документации:
groupCount()

Группа нуль обозначает весь образец в соответствии с соглашением. Он не включен в этот счет.

и
group(int)

Захват группы индексируются слева направо, начиная с единицы. Ноль группы обозначает весь шаблон, поэтому выражение m.group (0) эквивалентно m.group().

Так что группа 0 - это вся строка, которая будет соответствовать. и у вас есть группа захвата со всей строкой. Так что есть технически 2 группа.

0 является значением по умолчанию
1 будет начать свой определенный

Defined группа индексации из 1.

+0

Так группа 0, как не имеет значения для меня? –

+1

да вид. вам просто нужно использовать группу '1', считая начальную форму' 1'. а '0' - по умолчанию. – Saif

+0

В этом случае у меня всегда будет плюс еще 1 группа? –

1

Почему у меня 1 группа?

См Matcher specs:

groupCount() - Возвращает количество захватывающих групп в шаблоне этого Сличитель в.

У вас всего 1 группа захвата: (title).

Существуют ли различия между группой (0) и группой (1)?

group(0) - полное совпадение (т. Е. Строка, которая была сопоставлена ​​со всем рисунком), group(1) - это только подстрока, захваченная первой группой нумерации захвата. В вашем конкретном случае group(0) и group(1) равны, поскольку вы устанавливаете группу захвата для всего шаблона. Таким образом, все совпадение (в group(0)) и захваченная подстрока (в group(1)) совпадают.

Лучшая практика не использует группу захвата вокруг всего рисунка, так как у вас всегда есть доступ к ней, используя group(0).

1

group 0 вся строка, которая используется. Так как вы захватываете все, group 0 и group 1 (представляющий первую группу захваченных/сопоставленных) будут одинаковыми. Если у вас что-то вроде этого:

Pattern p = Pattern.compile("(title) = 123"); тогда вы сможете найти разницу между группами 0 и 1.

Примечание: group() такое же, как group(0)

Смежные вопросы