我正在从XML接收HTML代码,并试图在Java中找到最后一个。
当我运行代码时,我总是收到第一个跨度,而groupCount告诉我只有一个匹配项(第一个)。
我还尝试使用XML的硬编码版本(我创建了一个字符串变量,但仍然得到相同的结果)
这是我的代码:
String text = "<div><ul ><li><span>answer 1.</span></li><li><span>answer 2</span></li><li><span>answer3.</span></li><li><span>answer 4</span></li></ul><div><span>Cat 1 | Cat 2 | Cat 3</span></div></div>"
Pattern pattern3 = Pattern.compile("<span.*?(?=</span>)");
Matcher matcher3 = pattern3.matcher(desc);
if (matcher3.find()) {
int result = matcher3.groupCount();
String s = (matcher3.group(result))//->>always show the first result
}
先谢谢了
最佳答案
您可以再次调用matcher.find
,它将找到下一个匹配项。它不仅告诉您是否找到了任何东西,还主动搜索下一个匹配项。调用一次后,您只会得到第一场比赛。再次调用它时,下次调用matcher.group
时,您将获得第二个匹配项,依此类推。重复直到找到任何东西,然后再取最后的结果。另外,您实际上并不需要groupCount
,因为匹配中的组数始终相同-零。
String text = "<div><ul ><li><span>answer 1.</span></li><li><span>answer 2</span></li><li><span>answer3.</span></li><li><span>answer 4</span></li></ul><div><span>Cat 1 | Cat 2 | Cat 3</span></div></div>";
Pattern pattern3 = Pattern.compile("<span.*?(?=</span>)");
Matcher matcher3 = pattern3.matcher(text);
String s = null;
while (matcher3.find()) {
s = matcher3.group();
}
System.out.println(s);
输出为
<span>Cat 1 | Cat 2 | Cat 3
。如果您只想使用
<span>
标记中的内容,则可以使用正则表达式"<span>(.*?)</span>"
和matcher3.group(1)
来获取第一对()
内的内容(或将这些标记放在先行和后方位置,但是恕我直言,它更容易这条路)。