PHP Preg_replace() 模式无效
PHP Preg_replace() pattern not work
我想用 preg_replace.But 替换文本我的搜索字符串有一个 / 所以它有问题。
我该如何解决?
$search='r/trtrt';
echo preg_replace('/\b'.addslashes($search).'\b/', 'ERTY', 'TG FRT');
我得到 error preg_replace(): Unknown modifier 'T'
使用~
作为分隔符:
$search='r/trtrt';
echo preg_replace('~\b'.addslashes($search).'\b~', 'ERTY', 'TG FRT');
我总是使用 ~
,因为它是字符串中使用最少的字符之一,但您可以使用任何您想要的字符,并且不需要转义您的正则表达式字符!
在你的情况下你不需要 addslashes()
但如果你有一个更复杂的正则表达式并且你想转义字符你应该使用 preg_quote($search)
.
使用不同的 delimiter and don't use addslashes
,即转义非正则表达式特殊字符(或正则表达式和非正则表达式字符的混合,我想说大多数时候不要使用 addslashes
).
$search='r/trtrt';
echo preg_replace('~\b'. $search.'\b~', 'ERTY', 'TG FRT');
您可以使用 preg_quote
作为替代。不过,仅更改分隔符是最简单的解决方案。
为什么不按预期的方式转义
$search='r/trtrt';
echo preg_replace('/\b'.preg_quote($search, '/').'\b/', 'ERTY', 'TG FRT');
http://php.net/manual/en/function.preg-quote.php
preg_quote() takes str and puts a backslash in front of every
character that is part of the regular expression syntax. This is
useful if you have a run-time string that you need to match in some
text and the string may contain special regex characters
分隔符
If the optional delimiter is specified, it will also be escaped.
This is useful for escaping the delimiter that is required by the PCRE
functions. The / is the most commonly used delimiter.
添加斜杠不是这里要使用的功能。它不为 Regx 中的任何特殊字符提供转义。
The special regular expression characters are: . \ + * ? [ ^ ] $ ( ) {
} = ! < > | : -
使用适当的函数可以提高代码的可读性,如果在以后的某个时间点您或其他编码人员看到 ~
分隔符,他们可能只是认为它是个人的一部分 "style" 或支付它很少注意。但是,看到正确转义的输入会告诉任何有经验的编码人员输入可能包含与正则表达式冲突的字符。
就个人而言,每当我编写代码时,可读性是我的首要任务。如果一眼看不懂,那有什么用
我想用 preg_replace.But 替换文本我的搜索字符串有一个 / 所以它有问题。
我该如何解决?
$search='r/trtrt';
echo preg_replace('/\b'.addslashes($search).'\b/', 'ERTY', 'TG FRT');
我得到 error preg_replace(): Unknown modifier 'T'
使用~
作为分隔符:
$search='r/trtrt';
echo preg_replace('~\b'.addslashes($search).'\b~', 'ERTY', 'TG FRT');
我总是使用 ~
,因为它是字符串中使用最少的字符之一,但您可以使用任何您想要的字符,并且不需要转义您的正则表达式字符!
在你的情况下你不需要 addslashes()
但如果你有一个更复杂的正则表达式并且你想转义字符你应该使用 preg_quote($search)
.
使用不同的 delimiter and don't use addslashes
,即转义非正则表达式特殊字符(或正则表达式和非正则表达式字符的混合,我想说大多数时候不要使用 addslashes
).
$search='r/trtrt';
echo preg_replace('~\b'. $search.'\b~', 'ERTY', 'TG FRT');
您可以使用 preg_quote
作为替代。不过,仅更改分隔符是最简单的解决方案。
为什么不按预期的方式转义
$search='r/trtrt';
echo preg_replace('/\b'.preg_quote($search, '/').'\b/', 'ERTY', 'TG FRT');
http://php.net/manual/en/function.preg-quote.php
preg_quote() takes str and puts a backslash in front of every character that is part of the regular expression syntax. This is useful if you have a run-time string that you need to match in some text and the string may contain special regex characters
分隔符
If the optional delimiter is specified, it will also be escaped. This is useful for escaping the delimiter that is required by the PCRE functions. The / is the most commonly used delimiter.
添加斜杠不是这里要使用的功能。它不为 Regx 中的任何特殊字符提供转义。
The special regular expression characters are: . \ + * ? [ ^ ] $ ( ) { } = ! < > | : -
使用适当的函数可以提高代码的可读性,如果在以后的某个时间点您或其他编码人员看到 ~
分隔符,他们可能只是认为它是个人的一部分 "style" 或支付它很少注意。但是,看到正确转义的输入会告诉任何有经验的编码人员输入可能包含与正则表达式冲突的字符。
就个人而言,每当我编写代码时,可读性是我的首要任务。如果一眼看不懂,那有什么用