-1

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

我使用以下代码:

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

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

但所以我只得到abc123 456.

欢迎任何想法。

4

2 回答 2

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));
于 2010-08-09T23:55:46.100 回答
0

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

是的,它有效,但我注意到我可以简化正则表达式。abc|def 是命令,然后是由空格分隔的参数。我正在寻找一种方法来获得它们。但是我觉得截断命令,按空格分割比较容易,不是吗?

于 2010-08-25T13:54:03.793 回答