当前位置:  开发笔记 > 后端 > 正文

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

如何解决《从Ruby中的字符串创建不区分大小写的正则表达式》经验,为你挑选了4个好方法。

假设我有一个任意的字符串

`A man + a plan * a canal : Panama!`

我想做一个正则表达式搜索除了case之外的其他字符串.也就是说,这个正则表达式应该与字符串匹配

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

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

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



1> sepp2k..:

您可以使用它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")



2> David Tresne..:

Ruby正则表达式可以使用#{}符号以与字符串相同的方式插入表达式.但是,您必须转义任何正则表达式特殊字符.例如:

input_str = "A man + a plan * a canal : Panama!"
/#{Regexp.escape input_str}/i


这是一个非常好的答案 - 它比顶级投票响应更好,并且感觉更像是Ruby来引导我.希望其他人也会赞成这一点.

3> Andrew Grimm..:

如果您已经知道了所需的正则表达式,则可以在表达式(例如/the center cannot hold it is too late/i)之后添加"i" 以使其不区分大小写.


是的,但这不是我问的问题.我有一个任意字符串(来自用户输入),而不是正则表达式.例如,如果用户输入"a + b",我希望能够找到"A + b","a + B"或"A + B",而不是"aaaaab".

4> rusty..:

一个稍微更复杂的语法方法是使用%rRegexp文字的表示法:

input_str = "A man + a plan * a canal : Panama!"
%r(#{Regexp.escape(input_str)})i

当然,这取决于个人喜好.

推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有