转义字符串以用于正则表达式

Tom*_*mba 19 php regex pcre escaping

可能重复:
是否有一个PHP函数可以在应用之前逃避正则表达式模式?

我想在正则表达式中使用存储在变量中的字符串.跳转字符串以便在(PCRE)正则表达式中使用的最佳方法(在PHP中)是什么?

例如,

$text = 'm/z';  // this is the text I want to use as part of my regular expression
$text_regexp = '#' . $text . '#i';  // this is my regular expression
Run Code Online (Sandbox Code Playgroud)

会给

$text_regexp = '#m/z#i';
Run Code Online (Sandbox Code Playgroud)

但我想要以下正则表达式:

$text_regexp = '#m\/z#i';
Run Code Online (Sandbox Code Playgroud)

这是一个人为的例子,但我想简单说明这一点.

web*_*ave 42

preg_quote

从手册:

在正则表达式语法的每个字符前放置一个反斜杠

您也可以将分隔符作为第二个参数传递,它也将被转义.但是,如果您使用的#是分隔符,那么就没有必要逃避/


小智 9

preg_quote(string $ str [,string $ delimiter = NULL])

http://php.net/manual/en/function.preg-quote.php

  • 这就是**答案**! (2认同)

got*_*top 5

检查一下。您可以使用preg_quote();。


小智 5

所有这些答案都是正确的,只有metachars需要被转义.有点太糟糕了,php没有像preg_match([operator]/$ var /)那样有一个正则表达式运算符,所以delimeters可能是引用代理.这种方式不需要在外部$ var中引用分隔符.(Perl有m //,s ///或=〜运算符)

preg_quote是一个很好的方法,不幸的是,有时你想要匹配文字'\ char'而不将其转义为'\ char',例如,并逃避其余的.preg_quote()的选择并不多.

您可以逐字设置自己的PHP函数,引用metachars(或在preg_quote()之后取消引用).

像更换所有/([{}\[\]()^\$.|*+?\\<>$delim])/\\$1什么的.设置$ delim,和/或取出可能不需要转义的转义符或任何其他元素.

只是我的$ .02