在下面,我需要得到:
String regex = "Item#: <em>.*</em>";
String content = "xxx Item#: <em>something</em> yyy";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(content);
if( matcher.find() ) {
System.out.println(matcher.group());
}
它会打印出来:
Item#: <em>something</em>
但我只需要价值“某事”。
我知道我可以使用.substring(begin,end)来获取值, 但还有另一种更优雅的方式吗?
答案 0 :(得分:2)
它打印整个字符串,因为您已打印它。 matcher.group()
打印完整匹配。要获取匹配字符串的特定部分,您需要更改正则表达式以捕获组中标记之间的内容: -
String regex = "Item#: <em>(.*?)</em>";
此外,使用Reluctant
量词(.*?)
来匹配遇到</em>
之前的最少字符数。
然后在if中,打印group(1)
而不是group()
if( matcher.find() ) {
System.out.println(matcher.group(1));
}
无论如何,您不应该使用Regex
来解析HTML
。正则表达式不够强大,无法完成这项任务。您应该使用一些HTML
解析器,例如 - HTML Cleaner
。另请参阅OP中其中一条评论中提供的链接。这篇文章很好地解释了你可能遇到的问题。