РЕДАКТИРОВАТЬ: RE в исходном коде не имеет значения (или что это имеет какой-то смысл). Допустим, вы соответствуете (X)|(Y)
: два шаблона, которые объединяются в RE с ИЛИ. Как узнать, какой шаблон был на самом деле соответствует ??
Я пытаюсь извлечь только текст, который соответствует RE в скобках.
Проблема, с которой я сталкиваюсь, заключается в том, что я не могу понять, какая фактическая группа была сопоставлена, поскольку индекс группы не постоянен из-за ИЛИ.
Т.е. в строке, отмеченной XXX m.group()
, возвращается весь шаблон
pat1
abcdef2
А m.group(1)
производит
pat
null
А m.group(2)
производит
null
de
И m.groupCount()
- это просто общее количество групп в RE, поэтому оно бесполезно для индексации.
Я хочу, чтобы цикл печатался
pat
de
Жаль, что в java нет оператора m / perl, который будет извлекать материал и красиво помещать его в массив ;-)
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
public static void main(String[] args) throws IOException {
Pattern p = Pattern.compile("([pat]+)1|abc([de]+)f2");
String original = " pat1 abcdef2555";
Matcher m = p.matcher(original);
boolean result = m.find();
while (result) {
System.out.println(m.group()); // XXX want to print only matched GROUP!!
result = m.find();
}
}
}