2012-03-28 6 views
2

HTMLとXMLページからページタイトルを抽出しようとしています。java正規表現でページタイトルを抽出する

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); 
} 
+6

(本体部分を除去するために例えば)以下について、あなたは(http://stackoverflow.com/questions/1732348/regex-match-open- [HTMLを解析するために正規表現を使用して*いない]と考えられているものtags-except-xhtml-self-contained-tags)? –

+0

この種の質問はよくあることですが、答えは同じです。regexはHTMLの解析には適していません。それは、このような非常に戦術的な何かのために、あなたが成功するかもしれないと言われています。コードを投稿すれば、それを見ていきます。 –

+0

content = stringBuilder.toString(); //ファイルの内容を文字列として入力します。 \tパターンp = Pattern.compile( "。* 。* (。*)。*。*"); \tマッチャーm = p.matcher(コンテンツ); \t(m.find()){ \tタイトル= m.group(1); \t} – Lucy

答えて

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);