- ベストアンサー
$textの文字列の中にある & を ■ に変えたいです。
<? $text ="u&ampfayv&in&e6&rna6uinv"; ///////////////////////////// print $text."<br>"; print "<XMP>".$text."</XMP><br>"; ///////////////////////////////正規表現で置換 $text = preg_replace('/&[^amp]/', "■", $text); ////////////////////////////// print $text."<br>"; print "<XMP>".$text."</XMP><br>"; ////////////////////////////// print "u&ampfayv&in&e6■rna6uinv"; print "<XMP>u&ampfayv&in&e6■rna6uinv</XMP>"; ?> $textの文字列の中にある & を ■ に変えたいです。 amp という文字列の前についている & は ■ に置換してはいけません。 &amp という文字列の前についている & も ■ に置換してはいけません。 現在の正規表現では r が消えてしまっています。 ブラウザで見た場合に結果が u&fayv&in&e6■rna6uinv になるようにして下さい。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
否定的 先読み 正規表現 などのキーワードでGoogleなどで検索すると、サンプルが出てくると思います。(例えば、参考URLのページ。)
その他の回答 (3)
- sakusaker7
- ベストアンサー率62% (800/1280)
正規表現の解説書を読み直したほうがよろしいかと。 [] の中にあるのは文字列として扱われることはありませんから、 &[^amp] とかいても、& のあとに amp が続かないものという意味にはなりません。 #2の方の回答にあるように、否定先読みを使うべきでしょう。 使わないでも書けますけど面倒ですから。 ところで > u&ampfayv&in&e6&rna6uinv & とセミコロンがちゃんとついていないとアンパサンドには ならないような気がしますけどそれはよいのでしょうか? 一部には余計な気を回してくれるブラウザはあるかもしれませんが、 Firefoxではだめでしたよ。
- yambejp
- ベストアンサー率51% (3827/7415)
いまいち状況がわかりませんが、こんなことなんでしょうか? <?PHP $text ="u&ampfayv&in&e6&rna6uinv"; print $text."<br>"; $text = preg_replace(Array('/&([^amp])/','/&/'), Array('■$1','&'), $text); print $text."<br>"; ?>
- ranuwe
- ベストアンサー率33% (7/21)
$text = preg_replace("/&(?!amp)/","■",$text); 結果 u&ampfayv&in&e6■rna6uinv &ampを&にしていませんので指定する結果とは異なります。 どんなことしてるかわかりませんが&ampを見る限り エンコードの順序等を見直したほうがいいんじゃないでしょうか