2016-10-18 18 views
0

から無効なHTMLタグを削除する:Perlの正規表現は、私のような文字列が文字列

<div>[CODE]<br />test1</div> 
<div>test2</div> 
<div>test3</div> 
<div>test4<br />[/CODE]</div> 

の下に正規表現を使用して解析する:

$text =~ s#\[CODE\](.+?)\[\/CODE\]#<div>Code:</div><pre class="prettyprint">$1</pre>#isg; 

それはいくつかのクローズといくつかの開始と<pre>タグ内の文字列を返します。閉鎖されたdivではなく、以下のようになります

<div><div>Code:</div><pre class="prettyprint"><br />test1</div> 
<div>test2</div> 
<div>test3</div> 
<div>test4<br /></pre></div 

すべてのinvalを削除したい終了したが開始または開始されていないが閉じられていないid htmlタグ<pre>タグ。

それは以下のように返す必要があります:

<div><div>Code:</div><pre class="prettyprint"><br />test1 
<div>test2</div> 
<div>test3</div> 
test4<br /></pre></div 
+3

あなたが表示する最初の正規表現は解析していません。代わりになります。正規表現でHTMLを解析しないでください。 – simbabque

+4

http://stackoverflow.com/a/1732454/1848654 – melpomene

+0

これは難しい問題です。あなたのプログラムはどのタグが間違っているかをどのように知るでしょうかそれは些細な問題ではない。 – simbabque

答えて

0

短い答えはあなたが単純な方法で達成したいものを達成することを望むことができないということです。無効なHTMLを整理するのに尽力した人もいますが、結果は必ずしも望むものではありません。

tidypを試してみるか、Alien::TidypHTML::Tidyをインストールしてください。または、Marpaが提供しているものを探索することさえできます。

しかし、いいえ、単純な正規表現置換を使用して、任意の悪いHTMLを修正することはできません。

関連する問題