在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 

当然这归结于个人偏好。

  • 如何在Ruby中取消定义类?
  • 如何从Rails中的控制台调用控制器/视图方法?
  • 我如何在Rails中testing助手?
  • 已经在使用的地址 - bind(2)(Errno :: EADDRINUSE)
  • 我可以在OS X v10.6.8上升级到当前版本的Ruby(2.2.3)吗?
  • Ruby:如何通过HTTP发布文件作为multipart / form-data?
  • 什么是耙子,它是如何在轨道中使用的?
  • 铁轨3 - link_to销毁不工作
  • 从github克隆项目。 heroku不起作用
  • ActiveRecord Arel OR条件
  • 在Rails中生成slu((人类可读的ID)的最佳方法