我正在尝试转义要在PHP正则表达式中使用的字符串。到目前为止,我尝试了:
preg_quote(addslashes($string));
我认为我需要addslashes
正确地考虑字符串中的所有引号。然后preg_quote
转义正则表达式字符。
但是,问题在于引号使用反斜杠转义,例如\'
。但随后preg_quote
用另一个斜线转义,例如\\'
。因此,这又使报价再次转义。切换这两个功能都不起作用,因为这会留下一个未转义的反斜杠,然后将其解释为特殊的正则表达式字符。
PHP中是否有完成任务的函数?还是会怎么做?
正确的方法是使用preg_quote并指定使用的模式定界符。
preg_quote()取str并在作为正则表达式语法一部分的每个字符前面加一个反斜杠...字符是:
. \ + * ? [ ^ ] $ ( ) { } = ! < > | : -
尝试使用反斜杠作为分隔符是一个坏主意。通常您选择一个字符,该字符未在模式中使用。常用的是斜杠 /pattern/
,波浪号 ~pattern~
,数字符号 #pattern#
或百分号 %pattern%
。也可以使用括号样式定界符:(pattern)
@CasimiretHippolyte和@anubhava在评论中提到的带有修改的正则表达式。
$pattern = '/(?<![a-z])' . preg_quote($string, "/") . '/i';
也许想使用\b
单词边界。无需任何其他转义。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句