preg_replace用于替换括号内的表达式

时间:2016-02-24 00:29:25

标签: php regex preg-replace

我正在使用以下preg_replace语法来替换括号内表达式的出现。

$str = "(A or B) and ((C and D) or E)";
$str = preg_replace("#\([^()]*\)#", "$1", $str);
echo $str . "\n";

我预计输出为:$1 and ($2 or E)而不是and ( or E)。为什么会这样,我应该如何修改才能解决问题?

1 个答案:

答案 0 :(得分:0)

  

为什么会如此

Rizier123解释了上述内容。

  

我应该如何修改以解决问题?

$str = preg_replace_callback("#\([^()]*\)#",
                             function() { static $n; return '$'.++$n; }, $str);

preg_replace_callback()允许每次生成不同编号的替换。