我从XML接收HTML代码,并尝试在Java中查找last。当我运行代码时,我总是收到第一个span,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
}
4条答案
按热度按时间lmvvr0a81#
您可以再次调用
matcher.find
,它将找到下一个匹配项。它不仅告诉您是否找到了任何内容,而且还主动搜索下一个匹配项。在您调用它一次之后,您只得到第一个匹配项。当您再次调用它时,下一次调用matcher.group
时您将得到第二个匹配项,以此类推。重复此过程,直到它什么也没找到,然后获取最后一个结果。此外,您实际上并不需要groupCount
,因为匹配中总是存在相同数量的组--零。输出为
<span>Cat 1 | Cat 2 | Cat 3
。如果您只想使用
<span>
标记中的内容,您可以使用regex"<span>(.*?)</span>"
和matcher3.group(1)
来获取第一对()
中的内容(或者将标记置于lookahead和lookahead中,但恕我直言,这种方式更容易)。sqxo8psd2#
虽然你已经要求使用regex查找最后一个匹配项,但是也可以考虑使用jsoup,它是一个经过java测试的HTML解析器库,它已经经过测试,从可读性的Angular 来看很好
请参见使用jsoup查找最后一个匹配项
fafcakar3#
将贪婪量词
*
与.
一起使用,以查找最后一个出现的值。第一组捕获数
matcher3.group(1)
regexplanet demomwkjh3gx4#
试试这个: