让我们说我得到一个文本,我需要有一些正则表达式,如下所示:
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()
?答案 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数组?至少你事先知道属性 - 值对的数量。