Php preg_replace IF标记语句

Php preg_replace IF标记语句,php,preg-replace,preg-match,Php,Preg Replace,Preg Match,我使用这个代码 $text = ' [IF=is_login] [IF=is_subscriber]subscriber[/IF] [IF=is_partner]partner[/IF] [/IF]'; $count = 0; do { $content = preg_replace ("#\\[IF=(.+?)\\](.*?)\\[/IF\\]#ies", "the_if('\\1', '\\2', FALSE)", $text, -1, $count); }

我使用这个代码

$text = '
[IF=is_login]
    [IF=is_subscriber]subscriber[/IF]
    [IF=is_partner]partner[/IF]
[/IF]';
$count = 0; 
do 
{ 
    $content = preg_replace ("#\\[IF=(.+?)\\](.*?)\\[/IF\\]#ies", "the_if('\\1', '\\2', FALSE)", $text, -1, $count); 
} 
while ($count > 0);
Ie可能是一个层次结构,但结果表明该函数返回第一个[/IF]的所有内容


有什么想法吗?

有额外的转义斜杠,您需要设置
$text
,而不是
$content
,以便在循环过程中替换它

$text = preg_replace ("#\[IF=(.+?)\](.*?)\[/IF\]#ies", "the_if('$1', '$2', FALSE)", $text, -1, $count);

第一个输出=[IF=is\u subscriber]subscriber,但需要[IF=is\u subscriber]subscriber[/IF][IF=is\u partner]partner[/IF]这是当我取出
e
execute标志时得到的结果:
IF('is\u login','is\u subscriber','subscriber',FALSE')IF('is\u partner',partner',FALSE)
,看起来正确。可能有助于查看或了解\u if()应该做什么