如何编写捕获无限数量组的正则表达式?

时间:2012-01-07 12:19:45

标签: regex parsing regex-group

我有一个包含多个单词的字符串,例如str1, str2, str3, ... strN。单词的数量可以是任意的,在编写正则表达式时不知道。

是否可以编写匹配整个字符串和捕获组的正则表达式,每组一个单词?即将捕获以下群组:

  

第1组:str1
  ...
  N组:strN

原因:此字符串是较大字符串的一部分。可以使用正则表达式捕获大字符串的其他元素。我可以使用正则表达式解析大字符串,并将包含多个单词的字符串捕获到一个组。然后我可以将此组拆分为其他str(s)。我认为如果存在一个带正则表达式的整个大字符串的解决方案,如果它存在,将更加优雅。

2 个答案:

答案 0 :(得分:4)

如果您的输入字符串名为input

final String[] groups = input.split("\\s*,\\s*");

groups数组将包含所有匹配项。

答案 1 :(得分:0)

你可以做一些非常相似的事情:只用一组编写正则表达式,然后检查该组的所有匹配项。在java中它看起来像这样:

    Pattern p = Pattern.compile("\\b(\\w+)\\b(?:,\\s)*");
    Matcher m = p.matcher("str1, str2, str3, ... strN");
    while(m.find()){
        System.out.println(m.group(1));
    }

结果是:

str1
str2
str3
...
strN

纯正则表达式为\b(\w+)\b(?:,\s)*,其中(?:是非捕获组(不计为组)。