[PHP-users 20423]Re: 再帰(?)正規表現置換について

Masayuki AOKI info @ martin.bz
2004年 2月 18日 (水) 13:19:52 JST


 こんにちはmartinです。あまりよく理解していないのですが,

$str1 = '<!--{def x}--><!--{def y}-->z<!--{/def y}--><!--{/def x}-->';
$str2 = '<!--{def x}--><!--{def y}-->"$z"<!--{/def y}--><!--{/def x}-->';

$str = preg_replace_callback(
      '/<!--\{def\s+([A-Za-z][A-Za-z0-9_]*)\}-->(.*?)<!--\{\/def\s+\1\}-->/s',
      create_function(
                 '$m',
                 'return "<?php if (@count($$m[1])) { ?>$m[2]<?php } ?>";'
      ),
      preg_replace(
       '/<!--\{def\s+([A-Za-z][A-Za-z0-9_]*)\}-->(.*?)<!--\{\/def\s+\1\}-->/s',
       '<?php if (@count($\1)) { ?>\2<?php } ?>',
       $str
      )
     );
     
echo $str;

とすると,$str1では

<?php if (@count($x)) { ?><?php if (@count($y)) { ?>z<?php } ?><?php } ?>

が返り,$str2では

<?php if (@count($x)) { ?><?php if (@count($y)) { ?>"$z"<?php } ?><?php } ?>

が返ってきます。これはお望みのものとは違うでしょうか? これ以上入れ子に
なるとダメですが。見当違いでしたらすみません。

あと,現時点で
    http://www.ravi.ne.jp/~shige/?html_template
に繋がらないようです。覗いてみたいんですが。


/*
Masayuki AOKI: maoki @ bioreg.kyushu-u.ac.jp
     HomePage: http://martin.bz
*/




PHP-users メーリングリストの案内