2012-09-18 30 views
2

有没有简单的方法来忽略大小写正则表达式的一部分?我使用的是Ruby 1.9.3和Rails 3.2.8(不确定Rails是否有帮助,但我想我会提到它)。忽略大小写部分的正则表达式

例如,我想检查一个字符串是否是“你好,我的名字是巴塞洛缪”,但我只关心巴塞洛缪有适当的大写。我可以这样做:

/^[Hh][Ee][Ll][Ll][Oo], [Mm][Yy] [Nn][Aa][Mm][Ee] [Ii][Ss] Bartholomew$/ 

但这真是太痛苦了。我知道我可以在年底与/i忽略大小写整个字符串:

/^hello, my name is bartholomew$/i 

但我不能分割字符串(正则表达式和本身都是由用户输入的字符串)。

回答

8

下面是做到这一点的一种方式,通过使正则表达式区分大小写的默认和标记不敏感的部分:

> pattern = /(?i:hello, my name is) Bartholomew/ 
=> /(?i:hello, my name is) Bartholomew/ 
> pattern =~ 'Hello, my Name is Bartholomew' 
=> 0 
> pattern =~ 'Hello, my Name is bartholomew' 
=> nil 

的另一种方式做到这一点是让正则表达式不区分大小写默认情况下,并标记敏感部分:

> pattern = /hello, my name is (?-i:Bartholomew)/i 
=> /hello, my name is (?-i:Bartholomew)/i 
> pattern =~ 'Hello, my Name is Bartholomew' 
=> 0 
> pattern =~ 'Hello, my Name is bartholomew' 
=> nil