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ドキュメントには