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

Osamu Shigematsu shige @ ravi.ne.jp
2004年 2月 17日 (火) 23:07:16 JST


重松です。こんにちは。

表題のとおりなのですが、再帰的な正規表現による置換をうまくできないかで、
悩んでいます。

とりあえず、以下のようなスクリプトでは、

<?php

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

?>

最初に \2 でマッチした部分に含まれるものが、置換できません。

<?php if (@count($x)) { ?><!--{def y}-->z<!--{/def y}--><?php } ?>

もちろん、preg_match でキャプチャするようにしたものを再帰的に呼び出せ 
ば、
置換できるのはわかりますが、正規表現だけでできないものかと思っています。

よい方法があれば、ご指導ください。

環境 PHP 4.3 以降 (+ PCRE)

-- 
Osamu Shigematsu



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