我刚刚开始使用 Ruby,但遇到了一些问题。是
有一些技巧可以在之后修改 Regexp 对象的 casefold 属性
它已经被实例化了吗?
我尝试过的最好的想法如下:
irb(main):001:0> a = Regexp.new('a')
=> /a/
irb(main):002:0> aA = Regexp.new(a.to_s, Regexp::IGNORECASE)
=> /(?-mix:a)/i
但以下似乎都不起作用:
irb(main):003:0> a =~ 'a'
=> 0
irb(main):004:0> a =~ 'A'
=> nil
irb(main):005:0> aA =~ 'a'
=> 0
irb(main):006:0> aA =~ 'A'
=> nil
这里发生了一些我不明白的事情。 “我”在哪里上线 8?
irb(main):07:0> aA = Regexp.new(a.to_s, Regexp::IGNORECASE)
=> /(?-mix:a)/i
irb(main):08:0> aA.to_s
=> "(?-mix:a)"
irb(main):09:0>
我正在使用 Ruby 1.9.3。
我也无法理解下面的代码:为什么返回false
:
/(?i:a)/.casefold? #=> false
最佳答案
如您的控制台输出所示,a.to_s
将区分大小写作为子表达式的选项,因此 aA
被定义为
/(?-mix:a)/i
所以你要求 ruby 提供一个不区分大小写的正则表达式,但在那个不区分大小写的正则表达式中,唯一的东西是一个用于区分大小写的组,所以最终效果是 'a' 被匹配区分大小写
关于ruby - 无法理解为什么我在代码中禁用了 Regexp 选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14414019/