可能重复:
Is there a PHP function that can escape regex patterns before they are applied?
我想在正则表达式中使用存储在变量中的字符串。跳转字符串以便在(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
会给予
$text_regexp = '#m/z#i';
但我想要以下正则表达式:
$text_regexp = '#m\/z#i';
这是一个人为的例子,但我想简单说明这一点。
答案 0 :(得分:42)
答案 1 :(得分:8)
preg_quote(string $ str [,string $ delimiter = NULL])
答案 2 :(得分:5)
检查this。您可以使用preg_quote();.
答案 3 :(得分: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