Javaを使用してHTMLタグを削除する
1. 概要
すべてのHTMLタグを削除し、HTMLドキュメント文字列からテキストを抽出したい場合があります。
問題は非常に単純に見えます。 ただし、要件に応じて、さまざまなバリエーションがあります。
このチュートリアルでは、Javaを使用してこれを行う方法について説明します。
2. 正規表現の使用
HTMLはすでにString変数として取得されているため、一種のテキスト操作を行う必要があります。
テキスト操作の問題に直面したとき、正規表現(Regex)が最初に思い浮かぶアイデアかもしれません。
文字列からHTMLタグを削除することは、開始または終了のHTML要素に関係なく、パターン「<……>」に従うため、正規表現にとっては難しいことではありません。
これを正規表現に変換すると、次のようになります。 「<[^>]*>」 また 「<。*?>」 。
Regexはデフォルトで貪欲なマッチングを行うことに注意してください。 つまり、正規表現 「<。*>」 ‘から一致させたいので、私たちの問題では機能しません < ‘次まで’ >> ‘最後の代わりに’ >> ‘一列に。
それでは、HTMLソースからタグを削除できるかどうかをテストしてみましょう。
2.1. example1.htmlからのタグの削除
HTMLタグの削除をテストする前に、まずHTMLの例を作成しましょう。たとえば example1.html:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>This is the page title</title>
</head>
<body>
<p>
If the application X doesn't start, the possible causes could be:<br/>
1. <a href="maven.com">Maven</a> is not installed.<br/>
2. Not enough disk space.<br/>
3. Not enough memory.
</p>
</body>
</html>
それでは、テストを作成し、 String.replaceAll()を使用してHTMLタグを削除しましょう。
String html = ... // load example1.html
String result = html.replaceAll("<[^>]*>", "");
System.out.println(result);
テストメソッドを実行すると、次の結果が表示されます。
This is the page title
If the application X doesn't start, the possible causes could be:
1. Maven is not installed.
2. Not enough disk space.
3. Not enough memory.
出力はかなり良さそうです。 これは、すべてのHTMLタグが削除されたためです。
削除されたHTMLから空白を保持します。 ただし、抽出されたテキストを処理するときに、これらの空の行や空白を簡単に削除またはスキップできます。 ここまでは順調ですね。
2.2. example2.htmlからのタグの削除
これまで見てきたように、正規表現を使用してHTMLタグを削除するのは非常に簡単です。 ただし、このアプローチでは、取得するHTMLソースを予測できないため、問題が発生する可能性があります。
たとえば、HTMLドキュメントには or