質問: preg_replaceでの正規表現について お世話になります。 ereg_replace で書いた正規表現による置換処理を、 preg_replace に置き換えようとしています。 (preg_replaceの方が処理が速いとマニュアルにあったので) ところが、preg_replaceでの正規表現検索がうまくいかないで困っています。 基本的には、ereg_replaceの正規表現部分を//で囲んでいるだけです。 具体的には、下記のような処理を書いています。 間違いがあれば、ご指摘いただけましたら幸いです。 //### うまくいっている ereg_replace のパターン ここから ### $html=file_get_contents('template/temple.html'); //ひな形読み込み $search='\{dokuji tag\}.+\{_dokuji tag\}'; $replace=''; $html=ereg_replace($search,$replace,$html); //不要部分の削除 //### うまくいっている ereg_replace のパターン ここまで ### ↓ //### うまくいかない preg_replace のパターン ここから ### $html=file_get_contents('template/temple.html'); //ひな形読み込み $search='/\{dokuji tag\}.+\{_dokuji tag\}/m'; $replace=''; $html=preg_replace($search,$replace,$html); //不要部分の削除 //### うまくいかない preg_replace のパターン ここまで ### //### 置き換えるソース('template/temple.html') ここから ### タイトル: //### 置き換えるソース('template/temple.html') ここまで ### よろしくお願い申し上げます。
回答: 正規表現のオプションが「m」ではなくて「s」です。 $search='/\{dokuji tag\}.+\{_dokuji tag\}/s'; 「m」は改行が含まれているものを複数行と認識して、各行頭と行末を意識するようなもののようです。 つまりaaa bbb cccと文字列があった場合に、「/^c/m」とするとマッチします。 (「m」をつけなければ文字列の先頭にないのでマッチしない)