从Ruby中的字符串创建不区分大小写的正则表达式

时间:2010-08-06 17:55:48

标签: ruby regex

假设我有一个像

这样的任意字符串
`A man + a plan * a canal : Panama!`

我希望对除了case之外的其他字符串进行正则表达式搜索。也就是说,这个正则表达式应匹配字符串

`a man + A PLAN * a canal : PaNaMa!`

我认为最好的方法是在Ruby正则表达式中反斜杠 - 转义具有特殊含义的每个字符,然后使用该字符串Regexp.newRegexp::IGNORECASE作为参数。是对的吗?是否有一个经过验证的正则表达式,用于将任意字符串转换为 literal 正则表达式?

顺便说一句,我最终想要使用这个正则表达式来执行一个任意不区分大小写的MongoDB查询。所以,如果我有另一种方式,请告诉我。

4 个答案:

答案 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

当然,这取决于个人偏好。