嗯…如何在调用preg_replace时使用变量?
这不起作用:

foreach($numarray as $num => $text)
    {
        $patterns[] = '/<ces>(.*?)\+$num(.*?)<\/ces>/';
        $replacements[] = '<ces>$1<$text/>$2</ces>';
    }

是的,$num前面有一个加号。是的,我想要“tag the $num as <$text/>”。

最佳答案

您的替换模式看起来不错,但是由于您在匹配模式中使用了单引号,您的$num变量将不会插入其中。相反,尝试

$patterns[] = '/<ces>(.*?)\+'.$num.'(.*?)<\/ces>/';
$replacements[] = '<ces>$1<'.$text.'/>$2</ces>';

还需要注意的是,当从类似这样的“未知”输入构建一个模式时,通常使用preg_quote是一个好主意。例如
$patterns[] = '/<ces>(.*?)\+'.preg_quote($num).'(.*?)<\/ces>/';

尽管我猜给定变量名,在你的情况下它总是数值的。

08-06 20:20