我有以下正则表达式(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
。
欢迎任何想法。
答案 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是 命令然后有 参数由空间分隔。和我 寻找获得它们的方法。但是我 认为切断它更容易 命令并按空格分割,不是吗?