• ベストアンサー

正規表現の読み方

/{(.+?)}/e この正規表現はどのような意味でしょうか? 下記のようなプログラム(テンプレートエンジン)に使われています display('index.html', $prm); function display($tpl, $prm) { $html = file_get_contents($tpl); $html = preg_replace('/{(.+?)}/e', '$prm[\'$1\']', $html); echo $html; }

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.1

「 { と } に囲まれた } を含まない物」にマッチします。 で、{ と } に囲まれた中身が置換文字列の $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)

回答No.2

? は最長の一致指定子なので、 大括弧に括られた任意の一文字の1回以上の出来るだけ少ない繰り返しという意味。 e が付いてるから、その文字列を式として評価するってことでしょ? '{1}{12}{123}' という文字列があったら、{1} を $prm[1] と置換、次に {12} と $prm[12]、最後に {123}、$prm[123] 。 違うかな~?

関連するQ&A