2011-09-08 14 views
5

文字列からHTMLタグを削除したい。 これは簡単ですが、私は知っている、私はそうしました:RegExpとJavaでいくつかのHTMLタグを削除

public String removerTags(String html) 
    { 
     return html.replaceAll("\\<(/?[^\\>]+)\\>", " ").replaceAll("\\s+", " ").trim(); 
    } 

を問題は、私はすべてのタグを削除したくないということです..私はタグが

<span style=\"background-color: yellow\"> (text) </ span> 

文字列にそのまま滞在したいです..

私は...私がやっているGWTを使用してWebアプリケーションの検索で「ハイライト」の一種としてこれを使用してい

そして、検索が見つかった場合ので、私は、これを実行する必要がありますテいくつかのHTMLタグが含まれているxt(索引付けはLuceneによって行われています)、壊れていますが、safeHTMLBuilderのappendHTMLはStringをマウントできません。

これはかなり良い方法で行うことができますか?

ハグ。

+1

をこれらの質問は、これらの日は非常に頻繁にあります。なぜ私たちは同様の質問をまとめることができませんか? *#SO tip *;) –

+0

それは本当の男です。 – caarlos0

+0

エンティティ参照値も考慮に入れてください。 – Edward

答えて

4

この作業にはJSoupを使用することを強くお勧めします。正規表現は単にこのタスクには適していません。 JSoupでは、これは基本的にシンプルで読みやすく、簡単にメンテナンスできる1ライナーです!

JSoup.clean方法を見て、おそらくこの記事を持っている:

+0

はすべてのHTMLタグを削除します。 – caarlos0

+0

ああ、いいえ...干渉したくないタグのホワイトリストをメソッドに与えることができます。 – aioobe

+0

hmmm、私はしようとします... – caarlos0

0

私は過去に大きな効果を使用していたライブラリがOWASP AntiSamy

間違いなくこれですタグのホワイトリスト/ブラックリストを許可します。それは一見価値があるかもしれません。

+0

jsoupはより良いようです。 – caarlos0

+0

ありがとう、私はこの種のことをする必要がある次回は、libaryを心に留めておきます。 – extorn

1

私は正規表現を使用してこの問題の解決策を見つけた:

public static String filterHTMLTags(String html) { 

    // save valid tags: 
    String striped = html.replaceAll("(?i)\\<(\\s*/?(a|h\\d|b|i|em|cite|code|strong|pre|br).*?/?)\\>", "{{$1}}"); 
    // remove all tags: 
    striped = striped.replaceAll("\\<(/?[^\\>]+)\\>", " "); 
    // restore valid tags: 
    striped = striped.replaceAll("\\{\\{(.+?)\\}\\}", "<$1>"); 

    return striped; 
} 

は、あなたのHTMLコンテンツに「{{...}}」あなたが使用することをドントていることを確認してください。この「保存シーケンス」を簡単に変更することができます。有効なタグが最初でReplaceAll正規表現のリストで定義されています。

(|時間\ dの| B | I | EM |引用|コード|強い|前| BR)

上の "h \ d"は、 "h1、h2、..."が有効なタグであることを意味します。私はこのコードでこれをテストした

public static void main (String[] args) { 

    String teste = " <b>test bold chars</b> <BR/> <div>test div</div> \n" + 
      " link: <a href=\"test.html\">click here</a> <br />\n" + 
      " <script>bad script</script> <notpermitted/>\n"; 

    System.out.println("teste: \n"+teste); 
    System.out.println("\n\n\nstriped: \n"+filterHTMLTags(teste)); 
} 

さようなら、 セルジオフィゲイレド - My blog

関連する問題