【问题标题】:RegExp: is there way to pass string to regexp without ecranisation?正则表达式:有没有办法将字符串传递给正则表达式而不需要 ecranisation?
【发布时间】:2013-04-12 13:01:04
【问题描述】:

有没有办法将一些字符串传递给正则表达式,而不用担心特殊字符的电子化。

例如,我不会找到以单词“\north+west\”开头的行,因为你可以看到“\n”和“h+”应该被删除。那么问题是否有一些特殊的组合可以按原样编写文本?

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

或者也许你知道可以正确地编辑我的文本的函数?

【问题讨论】:

  • 大多数语言都提供了一些函数来转义应该插入到正则表达式中的字符串。您使用哪种语言?
  • 请注意,regex 标签的描述是:请同时包含一个标签,指定您正在使用的编程语言或工具。
  • 如果这是JS,这已经在SO上问了好几次了。
  • @TillHelgeHelwig 现在我在 PHP 中需要它,但我认为所有 PCRE 语言都有标准方法

标签: regex pcre


【解决方案1】:

在 PHP 和 Perl 中,您可以使用 \Q...\E 分隔符来自动转义正则表达式中的元字符。引用the doc:

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

【讨论】:

  • 刚刚找到\Q...\E doesn't work in JavaScript "Hulk sad" :(
  • 是的,它在 JS 中不起作用;这就是为什么您也被要求提供语言标签的原因,顺便说一句。 ) 但是那里有很多“自动转义”代码;事实上,jQuery UI(和其他流行工具)在它们的库中都有相应的方法。
【解决方案2】:

除了@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 函数并将分隔符(仅当这个不是特殊的正则表达式字符时)放在它的第二个参数中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-01
    • 1970-01-01
    • 2013-02-26
    • 1970-01-01
    相关资源
    最近更新 更多