110

重複の可能性:
HTML タグを削除するための正規表現

2 つの HTML タグの間の値を取得する式はありますか?

これを考えると:

<td class="played">0</td>

タグ0を削除してを返す式を探しています。<td>

4

3 に答える 3

190

HTML を正規表現で解析しようとしないでください。HTML は通常の言語ではないため、思いついた正規表現は難解なエッジ ケースで失敗する可能性があります。詳細については、この質問に対する重要な回答を参照してください。ほとんどが冗談としてフォーマットされていますが、それは非常に良い点です。


次の例は Java ですが、他の言語の正規表現は (同一ではないにしても) 同様です。


String target = someString.replaceAll("<[^>]*>", "");

非 html に < または > が含まれておらず、入力文字列が正しく構造化されていると仮定します。

それらが特定のタグであることがわかっている場合、たとえば、テキストに<td>タグのみが含まれていることがわかっている場合は、次のようにすることができます。

String target = someString.replaceAll("(?i)<td[^>]*>", "");

編集: Ωmega は、別の投稿のコメントで、複数のタグがある場合、複数の結果がすべてまとめて圧縮されるという良い点を指摘しました。

たとえば、入力文字列が<td>Something</td><td>Another Thing</td>の場合、上記の結果は になりSomethingAnother Thingます。

複数のタグが予想される状況では、次のようなことができます。

String target = someString.replaceAll("(?i)<td[^>]*>", " ").replaceAll("\\s+", " ").trim();

これにより、HTML が 1 つのスペースに置き換えられ、空白が折りたたまれ、末尾が削除されます。

于 2012-06-27T15:42:25.103 に答える
77

ささいなアプローチは、置き換えることです

<[^>]*>

何もなしで。ただし、入力の構造がどの程度悪いかによっては、失敗する可能性があります。

于 2012-06-27T15:31:39.117 に答える
6

jsoup http://jsoup.org/でそれを行うことができます

Whitelist whitelist = Whitelist.none();
String cleanStr = Jsoup.clean(yourText, whitelist);
于 2012-06-27T15:34:05.413 に答える