2012-03-28 48 views
2

我想從HTML和XML頁面中提取頁面標題。這是正則表達式使用:java正則表達式提取頁面標題

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

的問題是,它只是提取從HTML文件的標題,給我空的XML文件。任何人都可以幫助我改變正則表達式以獲得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); 
} 
+6

您是否考慮[* *不使用正則表達式來解析HTML(http://stackoverflow.com/questions/1732348/regex-match-open-標籤 - 除了-XHTML-自足標籤)? – 2012-03-28 17:27:57

+0

這類問題很常見,答案是一樣的:正則表達式不適合解析HTML。這就是說,對於這樣的戰術來說,你可能會成功。發佈你的代碼,我們會看看它。 – 2012-03-28 17:35:49

+0

content = stringBuilder.toString(); //把文件的內容作爲一個字符串 \t圖案P = Pattern.compile( 「* * (*) * *。。。。」); \t Matcher m = p.matcher(content); (m.find()){ \t title = m.group(1); \t} – Lucy 2012-03-28 17:56:50

回答

2

正如上面所說的,正則表達式不適合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

OMG ..正則表達式爲此?什麼以下(例如剝離主體部分)

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