2010-03-10 4 views
2
System.out.println(matcher.group(1)); 
System.out.println(matcher.group()); 

Мне нравится знать, в чем разница между двумя вышеуказанными кодами. Я получаю разные результаты. Может ли кто-нибудь об этом подумать?В чем разница между этими двумя ниже?

Благодаря

+0

Для простых образцов я получаю точные значения для group() и group (1): можете ли вы указать конкретное выражение и строку ввода? –

ответ

8

Вызов group() дает всю строку, которая соответствовала, в то время как group(1) дает первые Скобки «Захват» группу (или в более общем случае, group(n) даст вам захвата n-й группы, считая влево/открывающую скобка , начиная с 1).

Так, например, если у вас входную строку, как это:

The quick brown fox 

И вы сопоставляются следующим регулярным выражением (без кавычек):

"The (\\w+)" 

Тогда group() дало бы вам «Быстрая» и group(1) даст вам «быстрый».

Подробнее о том, как все это произведение регулярных выражений работает на Java, посмотрите См. Файл JavaDoc java.util.regex.Matcher.

+0

В этом регулярном выражении чего-то не хватает, разве вы не имели в виду «' (\\ w +) '?? (и технически говоря, он не будет соответствовать - match() ', он будет найден -' find() ') –

+0

Обновлен для добавления обратных косых черт, и вы правы в отношении' matches() 'versus' find() ' , –

2

Я указываю вам на JavaDocs для Matcher

группы():

Возвращает входной подпоследовательности, совпавшего с предыдущим матчем

группы (INT) :

Возвращает входную подпоследовательность, захваченную данной группой во время предыдущей операции совпадения.

+0

Пожалуйста, используйте '> ...' для blockquote. – kennytm

+0

@KennyTM Done :-) – karlgrz

1

API doc - это очень хорошее место для поиска в первую очередь.

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