ruby - 无法理解为什么我在代码中禁用了 Regexp 选项

标签 ruby regex

我刚刚开始使用 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/

相关文章:

ruby-on-rails - i18n-tasks 无法路由键

ruby - 为什么我可以使用像 `puts` 这样的内核单例方法?

python - 如何提取域名并将其插入新的 Pandas 列?

javascript - 从javascript中的字符串中提取所有数字

c# - 为什么这个通过 Regex 组循环打印输出两次?

java - 删除双尖括号中的 block 的正则表达式

ruby - 如何从外部获取给定 lambda 的参数值,而不显式返回其 `binding` ?

ruby-on-rails - 如何将 ruby​​ 命令提示符插入 ruby​​ 我的?

ruby-on-rails - rspec should have_select ('cars' , :options => ['volvo' , 'saab' ] 不工作

html - 在 HTML 文件中查找特定标签