- ベストアンサー
正規表現の読み方
/{(.+?)}/e この正規表現はどのような意味でしょうか? 下記のようなプログラム(テンプレートエンジン)に使われています display('index.html', $prm); function display($tpl, $prm) { $html = file_get_contents($tpl); $html = preg_replace('/{(.+?)}/e', '$prm[\'$1\']', $html); echo $html; }
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
「 { と } に囲まれた } を含まない物」にマッチします。 で、{ と } に囲まれた中身が置換文字列の $1 で参照されて、$prm[] の添え字になります。 たとえば、対象文字列が {aaa} だったら、$prm['aaa'] の値と置換されます。 / /e の e は、置換文字列が、$prm['aaa'] という文字列でなくてその式で表される値になります。 $prm['bbb'] = 'foo'; echo preg_replace('/{(.+?)}/','$prm[\'$1\']', 'aaa{bbb}ccc'); #=> "aaa$prm['bbb']ccc" echo preg_replace('/{(.+?)}/e','$prm[\'$1\']', 'aaa{bbb}ccc'); #=> "aaafooccc"
その他の回答 (1)
- 松延 英樹(@maznobu)
- ベストアンサー率46% (80/171)
? は最長の一致指定子なので、 大括弧に括られた任意の一文字の1回以上の出来るだけ少ない繰り返しという意味。 e が付いてるから、その文字列を式として評価するってことでしょ? '{1}{12}{123}' という文字列があったら、{1} を $prm[1] と置換、次に {12} と $prm[12]、最後に {123}、$prm[123] 。 違うかな~?