假设我有一个任意的字符串
`A man + a plan * a canal : Panama!`
我想做一个正则表达式搜索除了case之外的其他字符串.也就是说,这个正则表达式应该与字符串匹配
`a man + A PLAN * a canal : PaNaMa!`
我认为最好的方法是反斜杠 - 在Ruby正则表达式中具有特殊含义的每个字符,然后Regexp.new
使用该字符串和Regexp::IGNORECASE
参数.是对的吗?是否有一个经过验证的正则表达式,用于将任意字符串转换为文字正则表达式?
顺便说一句,我最终想要使用这个正则表达式来执行任意不区分大小写的MongoDB查询.所以,如果我有另一种方式,请告诉我.
您可以使用它Regexp.escape
来转义字符串中的所有字符,否则这些字符将由regexp引擎专门处理.
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正则表达式可以使用#{}
符号以与字符串相同的方式插入表达式.但是,您必须转义任何正则表达式特殊字符.例如:
input_str = "A man + a plan * a canal : Panama!" /#{Regexp.escape input_str}/i
如果您已经知道了所需的正则表达式,则可以在表达式(例如/the center cannot hold it is too late/i
)之后添加"i" 以使其不区分大小写.
一个稍微更复杂的语法方法是使用%r
Regexp文字的表示法:
input_str = "A man + a plan * a canal : Panama!" %r(#{Regexp.escape(input_str)})i
当然,这取决于个人喜好.