2011-12-13 18 views
2

の一環として、私はいくつかのHTMLコンテンツ持たまだすることはできません。 "のphpにpreg_replaceワード、という言葉は、アンカー

<p> 
Nunc nulla tincidunt metus sed eros auctor sagittis. Sed malesuada, mi et ornare 
molestie, urna dui 
<a href="http://google.com/" title="condimentum nulla">condimentum nulla, ut luctus</a> nisl ipsum ut dui. 
Praesent aliquam velit quis neque congue consectetur <b>nulla</b>. 
Curabitur turpis risus, malesuada nec volutpat sit amet, auctor porta velit. 
</p> 

を、私はリンクにすべての「NULLA」の単語を置き換えしたいのですが、場合にのみ、 nulla "は他のリンクURLや他のHTMLパラメータ(title、alt)の一部ではありません。上の例では、スクリプトは最初と最後の "nulla"という単語だけを置き換え、残りはそのまま残すべきです。私はこの正規表現にこだわってんだけど、それは私が望むどのように動作しません。それが必要として動作

/[^<a]+[^>]*nulla[^<\/a>]/ 
+0

'[^ <...]'正しいトラックにあるが、構文が間違っている。 – mario

+1

ありがとう、このソリューションは私: $ str = preg_replace(?〜[null](?!(?)[^ <] *(?:(?!/?a \ b)[^ <]*)*))〜i '、 ' $0 '、$ str ); – Luc

答えて

3

最終的な解決策:

$str = preg_replace('~\bnulla\b(?!(?>[^<]*(?:<(?!/?a\b)[^<]*)*)</a>)~iu', '<a href="novo-mega-link.php">$0</a>', $str); 
+1

壊れた時には壊れやすいと思うが、おそらくHTMLパーサを使うのがよいだろう – hakre

+0

"HTMLパーサー"とは何を意味するの? – Luc

+0

用語が示唆するもの:HTMLのパーサ – hakre