在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查询。 所以如果还有其他方法可以做,请让我知道。
您可以使用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
当然这归结于个人偏好。