1

我有一个包含类似([A-Za-z]\s)+. 它返回一组包含所有字母,后跟一个空格。但是,它只保留组中的最后一个元素,例如,如果文本包含a b c d,我尝试打印组匹配,但它只返回字母 (d)。这是我的程序

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

我的问题是为什么我只收到字母 (d) 而不是所有字母?是不是因为他们都是通过一组抓到的?我该如何纠正?我怎样才能遍历一组。例如,遍历检测为一组的所有匹配项?

4

1 回答 1

2

您的正则表达式的问题在于它匹配一个字符后跟一个空格的所有序列。

在您的示例中,group()将返回整个a b c d字符串。但是,当捕获大括号在重复中(例如您的+)时,只能检索最后捕获的值,因此group(1)返回d

要解决您的问题,只需+从您的正则表达式中删除。这将使find()成功几次,每次你都会得到不同的匹配。在这种情况下,您甚至可以删除括号并简单地使用group().

于 2012-11-06T17:52:15.943 回答