我有类似的东西:
<?php
$text = 'lorem ipsum';
$pattern = '/lorem/';
$value = 'test $0';
$text = preg_replace($pattern, $value, $text);
?>
我希望$ text的最终值为'test $ 0 ipsum'。问题是$ 0被解释为变量,并替换为'lorem',所以我得到了'test lorem ipsum'。
是否有办法禁用preg_replace()的此功能?
上面的示例当然得到了简化。我实际上是在做一个模板脚本,用文件内容替换占位符,文件内容可以是javascript,html等。因此,最好对preg_replace函数本身起作用,而不是被迫修改所有文件,以确保它们具有转义字符。
谢谢
答案 0 :(得分:1)
您可以preg_replace
进行转义,以获取替换值中的任何反向引用:
<?php
$text = 'lorem ipsum';
$pattern = '/lorem/';
$value = 'test $0';
echo preg_replace($pattern, preg_replace('/\$(\d+)/', '\\\$$1', $value), $text);
\$(\d+)
搜索任何$
,然后搜索一个或多个数字
\\\$$1
用$
替换了\$
,因为第一个\\
的反斜杠转义为PHP。 $1
是第一个捕获组,即数字。
答案 1 :(得分:1)
使用preg_quote,它是进行此操作的正确工具:
$text = 'lorem ipsum';
$pattern = '/lorem/';
$value = 'test $0';
$text = preg_replace($pattern, preg_quote($value), $text);
echo $text;
输出:
test $0 ipsum