2011-02-08 28 views
14

可能重复:
Is there a PHP function that can escape regex patterns before they are applied?摆脱使用字符串中的正则表达式

我想使用存储在一个变量正则表达式的字符串。 (PHP中)转义字符串以用于(PCRE)正则表达式的最佳方式是什么?

例如,

$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'; 

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

回答

36

preg_quote

从手册:

把反斜杠在每 字符属于正则 表达式语法的一部分的前

还可以通过使用分隔符作为第二个参数,它也会被转义。但是,如果您使用的是#作为分隔符,则不需要转义/

+0

谢谢你的快速回答。 – Tomba 2011-02-08 17:43:58

+0

不客气。乐意效劳。 – webbiedave 2011-02-08 17:45:26

4

检查this。你可以使用preg_quote();.

5

所有这些问题的答案是正确的,只有metachars需要进行转义。 它的种类太糟糕了,因为php doesen没有像preg_match([operator]/$ var /)这样的正则表达式运算符,因此delimeters可能是引用代理程序。这样,分隔符就不必在外部$ var中引用。 (Perl有m //,s ///或=〜运算符)

preg_quote是一个不错的方法,不幸的是,有时候你想匹配文字'\ char'而不将它转义为' \ char'例如,并逃脱其余。 preg_quote()没有多少选择。

你可以从字面上设置你自己的PHP函数,引用metachars(或在preg_quote()之后取消引用)。

像一个全部替换/([{}\[\]()^\$.|*+?\\<>$delim])/\\$1什么的。设置$ delim,并且/或者取出可能的转义或任何其他您不想转义的元。

只是我的.02

相关问题