2011-09-15 18 views
0

私は、任意のhtml文字列内のすべての空のアンカータグを見つける正規表現を探しています。 「空」は、それ自体またはその子の中にテキストノードがないことを意味する。例えば空のアンカータグを見つけるための正規表現

、これらが見つかりする必要があります。

<p>abc<a href="http://foo.com"></a>def</p> 
<p>abc<a href="http://foo.com"><span></span></a>def</p> 
<p>abc<a href="http://foo.com"><span><b></b></span></a>def</p> 

そして、これらません:

<p>abc<a href="http://foo.com">Some text</a>def</p> 
<p>abc<a href="http://foo.com"><span></span></a>def</p> 
<p>abc<a href="http://foo.com">Some<span><b>Text</b></span></a>def</p> 

正規表現はPOSIX互換でなければなりません(私はMySQLのためにそれを必要とします)。

なぜですか? 役立つカスタムregex_replace関数を使ってmysqlテーブルの列(純粋なMySQLを使用)で空のアンカーを削除する必要があります。正直なところ、これを実現するための良い方法はわかりません。 MySQL UpdateXMLは一度に複数のマッチでは機能しません。

+6

[正規表現でHTMLを解析しないでください](http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454) – Bohemian

+0

私は、htmlコードを含むフィールドを持つmysqlテーブルを検索し、空のアンカーを純粋なMySQLに置き換える必要があります。あなたは他の方法を知っていますか? – acme

+0

HTMLを正規表現で解析しようとすると悲しみにつながります。 –

答えて

-1

の作品答えは:それをしないために。 Parsing HTML with regex is badではなく、PHPs SimpleXMLクラスの組み合わせを使用してDOMツリーをナビゲートしています。

+0

それでは、理由を説明してくれますか? – acme

0

これは動作します。このパターンを使用する

/<a href=.*?><\/a>/ 
+0

私はPOSIX正規表現が遅延検索をサポートしているとは思わない。 [^>]を試してみてください* – xanatos

+0

これは空のアンカータグが他の空タグでないタグを見つけているだけなので、これは機能しません(上記の私の記事の例を参照)。 – acme

0

てみてください、それはあなたの条件に

<[^/>]+>[ \n\r\t]*</[^>]+> 
関連する問題