找到匹配但如何提取数据?

时间:2010-08-09 23:35:33

标签: java regex matcher

我有以下正则表达式(abc|def)( ?(\\d+|(?:(?!\\1)[a-z])+)?)*完全匹配主题abc123 456 现在我想获得所有部分 abc 123 456

我使用以下代码:

Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(subject);

while(m.find())
{
    System.out.println(m.group());
}

但我只得到abc123 456

欢迎任何想法。

2 个答案:

答案 0 :(得分:1)

您必须单独获取每个组而不是m.group()javadoc表示m.group()等同于m.group(0),并且可以使用m.group(int)版本访问各个组。因此,以下断言应该反映出您期望的分组。

Assert.assertEquals("abc", m.group(1));
Assert.assertEquals("123", m.group(2));
Assert.assertEquals("456", m.group(3));

答案 1 :(得分:0)

我使用了上述评论中解释的解决方案:

  

是的它有效,但我注意到我可以   简化正则表达式。 abc | def是   命令然后有   参数由空间分隔。和我   寻找获得它们的方法。但是我   认为切断它更容易   命令并按空格分割,不是吗?