我如何知道使用正则表达式可以获得多少组?

时间:2015-06-07 10:36:49

标签: java regex

让我们说我得到一个文本,我需要有一些正则表达式,如下所示:

String aContent = " title='111' title='222' ";
Pattern pattern = Pattern.compile("\\s{1,}(title=){1}+(.){1,}'{1}"); 
Matcher matcher = pattern.matcher(aTagContent);

使用find()

找到/匹配数据

我怎么知道我假设从这个正则表达式中获得了多少组?
我知道有matcher.groupCount()所以这不是我正在寻找的答案。

我真正要求的是:

  • 此文本将如何分割?如何在不使用matcher.groupCount()
  • 的情况下知道这一点

1 个答案:

答案 0 :(得分:1)

Matcher.groupCount()会返回Pattern中的群组数量,而不是结果中的群组数量。

Matcher.matches()尝试将整个输入字符串与您的模式匹配,Matcher.find()将依次尝试仅匹配您输入字符串的一部分。后者通常用于while循环,因此没有关于匹配量的先验知识。

你可以删除琐碎的{1}量词,它会使你的模式过于冗长。此外,{1,}可以替换为+。您的模式中缺少第一个引号,因此它不会与您的输入字符串匹配。也许这样的事情适合你:

Pattern pattern = Pattern.compile("\\s+(title)='([^']+)'");
Matcher matcher = pattern.matcher(" title='111' title='222' ");

while (matcher.find()) {
    System.out.println("attribute: " + matcher.group(1) + ", value: " + matcher.group(2));
}

您是否可以考虑首先使用String.split("\\s")并迭代返回的String数组?至少你事先知道属性 - 值对的数量。