Ruby Regexp:单个正则表达式的 new 和 union 之间的区别

2023-12-25

我已经简化了示例。假设我有一个包含正则表达式代码的字符串。我希望正则表达式能够匹配文字点,因此我希望它是:

\.

所以我创建了以下 Ruby 字符串:

"\\."

但是,当我将它与 Regexp.union 一起使用来创建我的正则表达式时,我得到以下信息:

irb(main):017:0> Regexp.union("\\.")
=> /\\\./

这将匹配斜杠后跟一个点,而不仅仅是一个点。将之前的结果与此进行比较:

irb(main):018:0> Regexp.new("\\.")
=> /\./

这给出了我想要的正则表达式,但没有所需的联合。

您能解释一下为什么 Ruby 会这样做以及如何正确地建立正则表达式的并集吗?使用的上下文是导入描述正则表达式的 JSON 字符串并在 Ruby 中联合它们。


将字符串传递给Regexp.union旨在字面匹配该字符串。没有必要逃避它,Regexp.escape已经被内部调用了。

Regexp.union(".")
#=> /\./

如果你想传递正则表达式Regexp.union,不要使用字符串:

Regexp.union(Regexp.new("\\."))
#=> /\./
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ruby Regexp:单个正则表达式的 new 和 union 之间的区别 的相关文章

随机推荐