0

さて、これが私の問題です:

リンクがあります:http ://www.blablabla.com/watch?v = 1lyu1KKwC74&feature = list_other&playnext = 1&list = AL94UKMTqg-9CfMhPFKXPXcvJ_j65v7UuV

そして、リンクは次のように言う2つのタグの間にあります。

<br>http://www.blablabla.com/watch?v=1lyu1KKwC74&feature=list_other&playnext=1&list=AL94UKMTqg-9CfMhPFKXPXcvJ_j65v7UuV<br></p>

preg_replaceでこの正規表現を使用する:

'@(^|[^\/]|[^>])('.addcslashes($link,'.?+').')([^\w\/]|[^<]$)@i'

そのような:

preg_replace('@(^|[^\/]|[^>])('.addcslashes($link,'.?+').')([^\w\/]|[^<]$)@i', "***",$strText);

結果の文字列は次のとおりです。

<br***p>

どちらが間違っている!

あるべきだった

 <br>***<br></p>

どうすれば希望の結果を得ることができますか?私はこれを解決しようとして頭を爆破しました。

別の有効なリンク内のリンクもstr_replace置き換えるので、これは適切な方法ではありません。境界がテキストまたは別のHTMLタグであっても、2つの境界を完全に一致させる必要があります。

4

1 に答える 1

1

何らかの理由で DOM パーサーを使用したくないと仮定すると、意図したことを行うのは次のように簡単だと思います。

preg_replace('@(^|[^\/]|[^>])('.addcslashes($link,'.?+').')([^\w\/]|[^<]$)@i', "$1***$3",$strText);

これは $1 と $3 を使用して、正規表現で一致した区切りテキストを元に戻します。

他の人が指摘しているように、DOM パーサーを使用する方が信頼性が高くなります。

これはあなたが望むことをしますか?

于 2012-11-01T18:45:36.773 に答える