Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP Preg_replace()模式不起作用_Php_Regex_Preg Replace_Preg Match - Fatal编程技术网

PHP 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~',

我想用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~', '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');