嗯...如何在调用 preg_replace 时使用变量?
这没有用:
foreach($numarray as $num => $text)
{
$patterns[] = '/<ces>(.*?)\+$num(.*?)<\/ces>/';
$replacements[] = '<ces>$1<$text/>$2</ces>';
}
是的,$num前面有一个加号。是的,我想“ tag the $num as <$text/>”。
嗯...如何在调用 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>/';
尽管我猜给定变量名称,但在您的情况下它始终是数字。
变量只会在用双引号声明的字符串中展开。所以要么使用双引号:
$patterns[] = "/<ces>(.*?)\\+$num(.*?)<\\/ces>/";
$replacements[] = "<ces>$1<$text/>$2</ces>";
或者使用字符串连接:
$patterns[] = '/<ces>(.*?)\+'.$num.'(.*?)<\/ces>/';
$replacements[] = '<ces>$1<'.$text.'/>$2</ces>';
您还应该查看preg_quote您的变量是否可能包含正则表达式元字符。