web-dev-qa-db-ja.com

文字列からHTMLタグを削除するための正規表現

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

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

これを考えると:

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

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

64
danny

正規表現を使用してHTMLを解析しないでください。 HTMLは通常の言語ではないため、難解なEdgeの場合、思いつく正規表現は失敗する可能性があります。詳細については、 この質問 への独創的な答えを参照してください。ほとんどが冗談としてフォーマットされていますが、非常に良い点です。


次の例は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が単一のスペースに置き換えられ、空白が折りたたまれ、端の部分がトリミングされます。

取るに足らないアプローチは

<[^>]*>

何もありません。しかし、あなたの入力がいかに不適切に構造化されているかによって、それは失敗するでしょう。

44
Joey

Jsoup http://jsoup.org/ でできます

Whitelist whitelist = Whitelist.none();
String cleanStr = Jsoup.clean(yourText, whitelist);
3
mihaisimi