php
2011-12-30 9 views 0 likes 
0

サイト上のテキストにある名前を置き換える必要があります。しかし、テキスト中の名前は、タグではなく、置換する必要があります。例えばタグで1回だけ交換する方法とタグを付けない方法はありますか?

:これに

<img src="" title="Justin Bieber" /> bla bla bla bla Justin Bieber bla bla bla Justin Bieber bla bla bla bla 

:イメージタグで

$text = '<img src="" title="Justin Bieber" /> bla bla bla bla Justin Bieber bla bla bla Justin Bieber bla bla bla bla'; 

$text = preg_replace('/Justin Bieber(?![^<>]*+>)/i', '<a href="http://en.wikipedia.org/wiki/Justin_Bieber">Justin Bieber</a>', $text, 1); 

つだけとNO:

<img src="" title="Justin Bieber" /> bla bla bla bla <a href="http://en.wikipedia.org/wiki/Justin_Bieber">Justin Bieber</a> bla bla bla Justin Bieber bla bla bla bla 

私は答えを見つけました。

答えて

1

複雑なHTMLを解析する場合は、HTMLパーサーを使用します。このサイトで「HTMLパーサ」を検索すると、多くの結果が得られます。

小さな制御文字列を扱う場合は、正規表現を使用します。それは単純に(それがHTMLタグ内にあるべきな)「ジャスティン・ビーバーは、」引用符内にあるかどうかをチェックしhttp://regexr.com?2vjqc

:ここ

非常に簡単な例です。

もちろん、この正規表現は改善される可能性がありますが、ソースを制御できない場合は、正規表現ではなくHTMLパーサーを使うことを強くお勧めします。

-2
$text = '<img src="" title="Justin Bieber" /> bla bla bla bla Justin Bieber bla bla bla Justin Bieber bla bla bla bla'; 
$replacement = '<a href="http://en.wikipedia.org/wiki/Justin_Bieber">Justin Bieber</a>'; 
echo preg_replace('/\s+Justin Bieber/i', $replacement, $text, 1); 
+1

-1。 REGEXでHTMLを解析しないでください。それは壊れるでしょう。もし彼が ''を持っていたら? –

+0

@Truthあなたの権利はそうです。 HTMLが整形されていれば、SimpleXMLを使用してDOMを反復処理し、htmlを置き換えて再作成することができます。 – dotoree

関連する問題