当模式包含斜杠
时,我收到未知修饰符错误代码:
preg_replace('/$v/', $replacement, $string)
var $ v,有时目录路径。
$v = folder/folder/file.ext
如何在preg_replace中处理$ v?
答案 0 :(得分:4)
回到原来的答案,因为结果发挥了作用,dany接受了我的回答。
使用preg_quote()
将其转义,并在将其放入字符串时使用双引号:
$v = preg_quote($v, '/');
echo preg_replace("/$v/", $replacement, $string);
如果您的$v
没有任何正则表达式元字符,并且您只想进行完全匹配,请再次使用str_replace()
:
echo str_replace($v, $replacement, $string);
答案 1 :(得分:2)
现有的答案都不是绝对正确的。
使用preg_replace()
转义PREG符号的正确方法如下:
$delim = '~';
$search = preg_quote('folder/folder/file.ext', $delim);
$replace = addcslashes($replace, '\\$');
//$replace = preg_quote($replace); // don't use $delim here!
$string = preg_replace($delim . $search . $delim, $replace, $string);
$replace
也需要进行转义,否则$0
会返回匹配的字符串。
答案 2 :(得分:0)
转义字符串以在正则表达式中使用的正确方法是preg_quote():
$v = preg_quote($v, '/');
preg_replace('/$v/', $replacement, $string)
注意,不仅分隔符/
被转义,而且还有所有其他正则表达式元字符,如点或大括号或其他转义序列。