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

UNO Shintaro uno @ venus.dti.ne.jp
2004年 2月 18日 (水) 00:14:01 JST


> 最初に \2 でマッチした部分に含まれるものが、置換できません。
>
> <?php if (@count($x)) { ?><!--{def y}-->z<!--{/def y}--><?php } ?>
>
> もちろん、preg_match でキャプチャするようにしたものを再帰的に呼び出せ
> ば、
> 置換できるのはわかりますが、正規表現だけでできないものかと思っています。


こんな感じですか?

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

$str = '<!--{def x}--><!--{def y}-->z<!--{/def y}--><!--{/def x}-->';
$str = preg_replace($p, $r, $str);
echo $str;
?>

結果は

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

になります。

-- 
UNO Shintaro, 宇野 信太郎
mailto:uno @ venus.dti.ne.jp
http://www.venus.dti.ne.jp/~uno/



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