在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 

当然这归结于个人偏好。

  • 在Rails应用程序中实现“记住我”
  • 如何在使用RVM时安装Ruby gems?
  • 如何知道模型是否是新的?
  • 添加一个CSS类到<%= f.submit%>
  • Ruby:从字节创build一个string
  • Ruby中方法名称的限制是什么?
  • 在js.erb文件中部分渲染
  • join的范围:has_many:通过关联
  • 我怎样才能从Ruby中检查某个进程是否正在运行?
  • 如何在Ruby on Rails的form_for中使用hidden_​​field?
  • 如何用NokogiriparsingHTML表格?