2009-06-27 14 views
0

私のパターンと一致しない文字列の一部を削除しようとしています。例えば、HTML文字列を削除する正規表現

<SYNC Start=364><P Class=KRCC> 
<Font Color=lightpink>abcd 

に私はそれを行うにはどうすればよい

<P Class=KRCC><Font Color=lightpink> 

を削除したいですか?

+0

私たちは、あなたが「私のパターン」によって何を意味するのか見当がつかない。あなたはより多くの情報を提供する必要があります。 –

答えて

1

`あなたのパターン 'とマッチして、ファイルに書き込んだり、データベースのテーブルを更新したりしてください。そうすれば、あなたは残りを削除しています。

3

あなたの質問は、正規表現を必要としている(または使用する必要がある)ことを示すものではありません。固定文字列を削除する場合は、従来の検索と置き換えを行います。

+0

私は同意します。文字列置換機能を使用することができれば、パフォーマンス上の利点も得られます – Stuart

+0

... HTMLノードを削除する場合は、HTMLパーサを使用してください。 – Svante

1

解析しているHTMLが有効で、常に既知の標準形式に従っている場合は、貪欲でないパターンを使用して不要なもののほとんどを削除できます。

これらのサンプルは、正規表現を処理するために使用しているツール/フレームワークに基づいて変更する必要があります。私は簡潔さのために特殊文字をエスケープしていません。すべての段落タグに一致するように

<p.*?>(.*?)</p> 

あなたは$ 1(またはグループにアクセスするために必要なものは何でもあなたの構文)でこれらの一致を置き換えます。

無関係な2つの開始タグと終了タグを誤ってマッチさせないように、貪欲でない(?)パターンを使用することが重要です。例:

<p.*>(.*)</p> 

非常に異なる動作をします。次の例ではHTMLの場合、それは正しく2つの段落と一致しません:

<p>Lorem ipsum.</p><p>Lorem ipsum.</p> 

代わりに、コンテンツを失うことになる最初の部分として、「<p>Lorem ipsum.</p><p>」に一致します。あなたが特定のクラスを持つ段落を一致させる必要がある場合は

、あなたはこのようなものを使用することができます:あなたは非標準HTMLで作業を開始するときに物事がスティッキー取得

<p.*?class="delete".*?>(.*?)</p> 

です。たとえば、これはすべての有効なHTMLであるが、それをクリーンアップするパターンが醜いのようになります。

<p>no class</p> 
<p class=delete>no quotes</p> 
<p class="delete">double quotes</p> 
<p class='delete'>single quotes</p> 
<p>space in closing tag</p > 
<p>no closing tag 
+2

実際、HTMLを解析する正規表現には限界があると思っていました。 – Tomalak