[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 メーリングリストの案内