RegExp:有没有办法将字符串传递给regex而不用ecranisation?

时间:2013-04-12 13:01:05

标签: regex pcre

有没有办法将一些字符串传递给regexp而不用担心特殊字符的ecranisation。

例如,我不会找到以“\ north + west \”开头的行,因为你可以看到“\ n”和“h +”应该是ecranised。所以问题是有一些特殊的组合来写文本吗?

/^\s+(<some special combination> \north+west\)\s+/i

或者您可能知道可以正确制作文字的功能吗?

2 个答案:

答案 0 :(得分:1)

在PHP和Perl中,您可以使用\Q...\E分隔符来自动调用regexp中的元字符。引用the doc

  

\Q\E可用于忽略模式中的regexp元字符。   例如:\w+\Q.$.\E$将匹配一个或多个单词字符,   后跟文字.$.并锚定在字符串的末尾。

答案 1 :(得分:0)

@raina77ow answer之外,当您通过PHP等需要模式分隔符的语言使用pcre时,如果您的字符串包含开头或结束分隔符,则无法使用\Q...\E功能。例如,您不能编写如下模式:

/\Qabc/def\E/
~\Qabc~def\E~
[\Qabc[def\E]
[\Qabc]def\E]
(\Qabc)def\E)
(\Qabc(def\E)

唯一的方法是使用preg_quote函数并在第二个参数中放置分隔符(仅当这个分隔符不是特殊的正则表达式字符时)