• ベストアンサー

$textの文字列の中にある & を ■ に変えたいです。

<? $text ="u&ampampfayv&ampin&ampe6&rna6uinv"; ///////////////////////////// print $text."<br>"; print "<XMP>".$text."</XMP><br>"; ///////////////////////////////正規表現で置換 $text = preg_replace('/&[^amp]/', "■", $text); ////////////////////////////// print $text."<br>"; print "<XMP>".$text."</XMP><br>"; ////////////////////////////// print "u&ampampfayv&ampin&ampe6■rna6uinv"; print "<XMP>u&ampampfayv&ampin&ampe6■rna6uinv</XMP>"; ?> $textの文字列の中にある & を ■ に変えたいです。 amp という文字列の前についている & は ■ に置換してはいけません。 &ampamp という文字列の前についている & も ■ に置換してはいけません。 現在の正規表現では r が消えてしまっています。 ブラウザで見た場合に結果が u&ampfayv&in&e6■rna6uinv になるようにして下さい。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • racci
  • ベストアンサー率64% (9/14)
回答No.1

否定的 先読み 正規表現 などのキーワードでGoogleなどで検索すると、サンプルが出てくると思います。(例えば、参考URLのページ。)

参考URL:
http://www4.ocn.ne.jp/~kaerume/k2e/regex_3.html

その他の回答 (3)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.4

正規表現の解説書を読み直したほうがよろしいかと。 [] の中にあるのは文字列として扱われることはありませんから、 &[^amp] とかいても、& のあとに amp が続かないものという意味にはなりません。 #2の方の回答にあるように、否定先読みを使うべきでしょう。 使わないでも書けますけど面倒ですから。 ところで > u&ampampfayv&ampin&ampe6&rna6uinv &amp; とセミコロンがちゃんとついていないとアンパサンドには ならないような気がしますけどそれはよいのでしょうか? 一部には余計な気を回してくれるブラウザはあるかもしれませんが、 Firefoxではだめでしたよ。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

いまいち状況がわかりませんが、こんなことなんでしょうか? <?PHP $text ="u&ampampfayv&ampin&ampe6&rna6uinv"; print $text."<br>"; $text = preg_replace(Array('/&([^amp])/','/&amp/'), Array('■$1','&'), $text); print $text."<br>"; ?>

  • ranuwe
  • ベストアンサー率33% (7/21)
回答No.2

$text = preg_replace("/&(?!amp)/","■",$text); 結果 u&ampampfayv&ampin&ampe6■rna6uinv &ampampを&ampにしていませんので指定する結果とは異なります。 どんなことしてるかわかりませんが&ampampを見る限り エンコードの順序等を見直したほうがいいんじゃないでしょうか

関連するQ&A