如何从<em>中获取“某些东西”</em>使用java正则表达式

时间:2012-11-26 07:44:39

标签: java html regex

在下面,我需要得到:

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

1 个答案:

答案 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中其中一条评论中提供的链接。这篇文章很好地解释了你可能遇到的问题。