preg_replaceで”(ダブルクォーテーション)と’(シングルクォーテーション)の違いでハマったこと


WEBアプリの開発で設定の読み書きをDBではなくファイルでやっちゃおうということで、file_get_contentsで読み込んだファイルの一部を正規表現で書き換えて上書きしちゃうーってプログラムをサクッと書いてテストしてみたが全然文字列を置き換えてくれない。

結論から言うと、パターン文字列の中に”$”とかが入ってる場合にはその文字自体のエスケープ(¥)ももちろんだけど、パターンを囲む区切りにはダブルクォーテーションを使っちゃダメーってことでした。

要はパターンの中の$をテキストエディタなどの正規表現での検索ではちゃんと認識されても、PHP側が変数として展開してしまうために誤認識されるようでヘ(´o`)ヘ 
こんなしょーもない知識不足のせいで、何十分もあーでもない、こーでもないーとハマってしまったのです。

ファイルは概ね下記のような感じで、単純に変数名($●●) = 値;みたいなのが複数行詰まってるだけのテキストファイルで、与えられた値によってそれらの行の文字列を置換して値更新しようとするってことだけ。

 ファイルを読み込んで置換したい行の値を更新するためのPHPとして下記のようなコードを用意した。

 2行目のパターンは”(ダブルクォーテーション)で囲んじゃってます。
これだと先頭の$はバックスラッシュでエスケープしてるものの、実際には変数として認識されちゃってるんでしょうね。

これを

 と修正するだけで、あら、なんということでしょう…ちゃんと対象文字列を認識して置換してくれました。
ちゃんちゃん!

こんなつまらないミスしないように備忘録。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA