PHP Preg_replace()模式不起作用
我想用preg_replace替换文本。但是我的搜索字符串有一个/所以它会产生问题 我怎样才能解决它PHP Preg_replace()模式不起作用,php,regex,preg-replace,preg-match,Php,Regex,Preg Replace,Preg Match,我想用preg_replace替换文本。但是我的搜索字符串有一个/所以它会产生问题 我怎样才能解决它 $search='r/trtrt'; echo preg_replace('/\b'.addslashes($search).'\b/', 'ERTY', 'TG FRT'); 我得到错误preg\u replace():未知修饰符“T”使用~作为分隔符: $search='r/trtrt'; echo preg_replace('~\b'.addslashes($search).'\b~',
$search='r/trtrt';
echo preg_replace('/\b'.addslashes($search).'\b/', 'ERTY', 'TG FRT');
我得到
错误preg\u replace():未知修饰符“T”
使用~
作为分隔符:
$search='r/trtrt';
echo preg_replace('~\b'.addslashes($search).'\b~', 'ERTY', 'TG FRT');
我总是使用~
,因为它是字符串中使用最少的字符之一,但是您可以使用任何您想要的字符,并且不需要转义您的regexp字符
在您的情况下,不需要使用addslashes()
,但是如果您有一个更复杂的regexp,并且希望转义字符,那么您应该使用preg_quote($search)
使用另一个且不使用的字符,即转义非regex特殊字符(或者混合使用正则表达式和非正则表达式字符,我认为大多数情况下不使用addslashes
)
您可以使用它作为替代方法。不过,更改分隔符是最简单的解决方案。为什么不按预期的方式对其进行转义呢
$search='r/trtrt';
echo preg_replace('/\b'.preg_quote($search, '/').'\b/', 'ERTY', 'TG FRT');
preg_quote()接受str并在每个
作为正则表达式语法一部分的字符。这是
如果您有一个运行时字符串需要在某些方面匹配,则此选项非常有用
文本和字符串可能包含特殊的正则表达式字符
分隔符
如果指定了可选分隔符,也将对其进行转义。
这对于转义PCRE所需的分隔符非常有用
是最常用的分隔符
添加斜杠不是这里要使用的函数。它不为Regx中的任何特殊字符提供转义
特殊的正则表达式字符是:.\+*?[^]$(){
}=!<>|:-
使用适当的函数可以提高代码的可读性,如果您或其他编码人员在稍后某个时间看到~
分隔符,他们可能会认为它是个人“风格”的一部分但是,看到输入正确转义会告诉任何有经验的编码人员,输入可能包含与正则表达式冲突的字符
就我个人而言,每当我写代码时,可读性都是我的首要任务。如果你一眼就看不懂,那又有什么好处呢
$search='r/trtrt';
echo preg_replace('/\b'.preg_quote($search, '/').'\b/', 'ERTY', 'TG FRT');