在Ruby中从string创build一个不区分大小写的正则expression式

比方说,我有一个任意的string

`A man + a plan * a canal : Panama!` 

我想做一个正则expression式search除了大小写以外的string。 也就是说,这个正则expression式应该匹配string

 `a man + A PLAN * a canal : PaNaMa!` 

我认为最好的方法是在Ruby正则expression式中以反斜杠转义每个具有特殊含义的字符,然后使用该string和Regexp::IGNORECASE作为参数执行Regexp.new 。 是对的吗? 有没有一个尝试和真正的正则expression式转换任意string到文字正则expression式?

顺便说一下,我最终希望使用这个正则expression式来执行任意的不区分大小写的MongoDB查询。 所以如果还有其他方法可以做,请让我知道。

4 Solutions collect form web for “在Ruby中从string创build一个不区分大小写的正则expression式”

您可以使用Regexp.escape来转义string中所有由正则expression式引擎处理的字符。

 Regexp.new(Regexp.escape("A man + a plan * a canal : Panama!"), Regexp::IGNORECASE) 

要么

 Regexp.new(Regexp.escape("A man + a plan * a canal : Panama!"), "i") 

Ruby正则expression式可以像string一样插入expression式,使用#{}表示法。 但是,您必须转义任何正则expression式特殊字符。 例如:

 input_str = "A man + a plan * a canal : Panama!" /#{Regexp.escape input_str}/i 

如果你知道正则expression式,你可以在expression式之后添加“i”(例如/the center cannot hold it is too late/i ),以使它不区分大小写 。

一个稍微更有语法含义的方法是使用Regexp文字的%r符号:

 input_str = "A man + a plan * a canal : Panama!" %r(#{Regexp.escape(input_str)})i 

当然这归结于个人偏好。

  • 活动pipe理员:只定制新表单
  • Ruby on Rails 3 - 为每个请求重新加载lib目录
  • Ubuntu的noob rails安装在zlib上失败
  • 你在Ruby中调用&:运算符是什么?
  • 什么是复制activerecordlogging最简单的方法?
  • 重复使用黄瓜步骤
  • 我如何在Haml制作dynamicID?
  • 从Rails中确定ruby的版本