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