0

在下面,我需要得到:

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) 来获取值,但是还有另一种更优雅的方法吗?

4

1 回答 1

2

它会打印整个字符串,因为您已经打印了它。matcher.group()打印完整的匹配。要获取匹配字符串的特定部分,您需要更改正则表达式以捕获组中标签之间的内容:-

String regex = "Item#: <em>(.*?)</em>";

此外,使用Reluctant量词匹配遇到(.*?)an 之前的最少字符数。</em>

然后在 if 中,打印group(1)而不是group()

if( matcher.find() ) {
    System.out.println(matcher.group(1));
}

无论如何,你不应该使用Regexparse HTML。正则表达式不足以完成这项任务。您可能应该使用一些HTML解析器,例如 - HTML Cleaner。另请参阅 OP 中的评论之一中提供的链接。那篇文章很好地解释了您可能面临的问题。

于 2012-11-26T07:47:24.660 回答