2012-05-28 8 views
0

Допустим, у меня есть некоторое регулярное выражение = ".. (group1) .. | .. (group2) .."Java: регулярные выражения - группы в общем

pattern.matcher(regex) 
matcher.find() 
// how can i access the result?? 
// i dont wanna use matcher.group(1) or matcher.group(2) 
// since i don't really know what will be the result. 

Как вы можете видеть я не знаю как получить мой результат. im ищет что-то вроде matcher.getResultedGroup .. Может кто-нибудь объяснить, что мне делать?

  • Если у вас другое предложение, чтобы расширить свои знания я хотел бы услышать ..
+0

Привет, Попококо, есть причина, почему в этом вопросе нет принятых ответов? –

ответ

2

Вы можете использовать одну группу захвата, с не группами захватывающих внутри:

((?:group1)|(?:group2)) 
+0

Нет необходимости устанавливать скобки вокруг полного регулярного выражения, фактическое совпадение полного регулярного выражения находится в группе 0. –

+0

Да, этот пример имеет смысл как часть большего выражения. –

0

См Javadoc http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html и http://docs.oracle.com/javase/6/docs/api/java/util/regex/Matcher.html

Может быть Somthing как это будет работать:

while(matcher.find()) { 
    String groupMatch = matcher.group(groupIndex) 
} 

matcher.find попытается найти все подпоследовательности (подстроки) строки, которые соответствуют вашему регулярному выражению.

+0

Я должен был упомянуть im довольно новый с регулярным выражением, и это занимает некоторое время, чтобы понять все. – Popokoko

+0

См. Мой обновленный комментарий и остальные, каждый из них хорош сам по себе :) – user3001

1

Iterate over Matcher.start(groupNum). groupNum, который не является 0, но начинается с 0 - это то, что вы ищете (при условии, что это все ваше выражение).

В противном случае включите все ваше подвыражение в группу захвата: ((group1)|(group2)...) и сравните начальные индексы внутренних групп с внешней группой.

+0

Это то, что ive делал .. хотя это выглядит довольно проводным, он работает (но не идеально.) для (int m = 1; m <= matcher.groupCount(); m ++) { \t \t \t \t if (matcher.group (m)! = null) { \t \t \t \t r = matcher.group (m); \t \t \t \t} \t \t \t} – Popokoko

0

Вам не нужно входить в подгруппы, если вы этого не хотите. Фактическое совпадение находится в группе 0: Matcher.group(0) или эквивалент Matcher.group(). Обратите внимание, что вы можете использовать группы без захвата для надежных ресурсов.

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