27

<a hrefリンク(それぞれとタグ)を除くすべてのHTMLを削除する正規表現を作成しようとして</a>います。100%安全である必要はありません(すでにコンテンツを解析しているので、インジェクション攻撃などについて心配する必要はありません。承認され、SWFムービーに公開されました)。

私が使用している元の「ストリップタグ」正規表現はでしたが<(.|\n)+?>、これをに変更しようとしまし<([^a]|\n)+?>たが、もちろん、最初にaが含まれているタグではなく、スペースが含まれているタグを使用できます。

それは本当に重要なことではありませんが、誰かが私がこれをActionScript3.0でFlashムービー用に書いていることを知りたがっている場合に備えて。

4

6 に答える 6

27
<(?!\/?a(?=>|\s.*>))\/?.*?>

これを試して。pタグにも似たようなものがありました。彼らのために働いたので、理由がわかりません。否定先読みを使用して、(オプションの / 文字を前に付けた) (正の先読みを使用して) (オプションの / プレフィックスを付けた) の後に > またはスペース、何か、> を続けたものと一致しないことを確認します。これは、次の > 文字まで一致します。これをsubstに入れます

s/<(?!\/?a(?=>|\s.*>))\/?.*?>//g;

これにより、開始タグと終了タグのみが残されます

于 2008-09-04T16:29:23.193 に答える
1

私はそれについて続けていますが、正規表現をあまり頻繁に推奨できる方法はありませ。この種のものをテストするのは素晴らしいことです。

于 2008-09-05T12:41:37.257 に答える
1

一般に、このアプローチには問題があります。正規表現は、「フラットな」テキスト マッチに最適です。ネストされたデータは、正規表現エンジンを設計されていない領域に押し込みます。一般的な HTML 解析には、正規表現エンジンではなくパーサーが必要です (完全な技術的詳細が必要な場合は、通常の言語とコンテキストフリー言語の違いについては Google を参照してください)。

/</ と />/ を空の文字列またはそれに相当するエンティティに置き換えることで、すべてのタグを簡単に取り除くことができますが、正規表現を使用して HTML を選択的にフィルタリングすると、さまざまな偶発的または悪意のある入力に対して脆弱になります。

于 2008-09-22T11:36:53.547 に答える
0

どうぞ:

{<(?!i|b|h[1-6]|/i|/b|/h[1-6][\s|>|/])[^>]*>}
于 2009-12-28T08:06:21.733 に答える
-1

どうですか

<[^a](.|\n)+?>

于 2008-09-04T16:09:10.030 に答える
-2

strip_tags()これを行います。

ここでは、すべての<a><p><font><b><i><sup>タグを含めて、整理されたバージョンを出力しています。

cat input.htm | tr -d '\n' | php -r '$input=fgets(STDIN); echo strip_tags($input,"<a><p><font><b><i><sup>");' | tidy -i -wrap 0 -o output.htm
于 2014-05-13T20:02:30.687 に答える