我正在使用以下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)
。为什么会这样,我应该如何修改才能解决问题?
答案 0 :(得分:0)
为什么会如此
Rizier123解释了上述内容。
我应该如何修改以解决问题?
$str = preg_replace_callback("#\([^()]*\)#",
function() { static $n; return '$'.++$n; }, $str);
preg_replace_callback()
允许每次生成不同编号的替换。