java Regular Expression提取页面标题

时间:2012-03-28 17:26:43

标签: java regex

我正在尝试从HTML和XML页面中提取页面标题。这是我使用的正则表达式:

Pattern p = Pattern.compile(".*<head>.*<title>(.*)</title>.*</head>.*");

问题是它只从HTML文件中提取标题,并为XML文件提供null。任何人都可以帮我改变正则表达式以获取XML页面标题吗?

代码:

content= stringBuilder.toString(); // put content of the file as a string
Pattern p = Pattern.compile(".*<head>.*<title>(.*)</title>.*</head>.*");
Matcher m = p.matcher(content);
while (m.find()) {
    title = m.group(1);
}

2 个答案:

答案 0 :(得分:2)

如上所述,regexp不适合XML和HTML解析。但是,在某些情况下它会派上用场,所以这里应该有用:

Pattern p = Pattern.compile("<head>.*?<title>(.*?)</title>.*?</head>", Pattern.DOTALL); 
Matcher m = p.matcher(content);
while (m.find()) {
    title = m.group(1);
}

如果您使用Matcher,则无需在前后放置.*(因为它们不属于任何组)。您也可以查看不情愿的限定符(即*?而不是*+?而不是+等等。)如果没有。最后,您还应该使用Pattern.DOT_ALL标志,否则点与行终止符

不匹配

答案 1 :(得分:1)

OMG ..正则表达式?怎么样(例如去除身体部分)

StringBuilder sb = new StringBuilder();
sb.append(html, html.indexOf("<body>") + 6, html.lastIndexOf("</body>"));
String headless = sb.toString();
System.out.println(headless);