我正在尝试从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);
}
答案 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);