嗯...我如何使用变量调用的preg_replace?
这并没有工作:
foreach($numarray as $num => $text)
{
$patterns[] = '/<ces>(.*?)\+$num(.*?)<\/ces>/';
$replacements[] = '<ces>$1<$text/>$2</ces>';
}
是的, $num
是一个加号preceeded。 是的,我想“ 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
如果你的变量可能包含正则表达式元字符。