Ruby Regex: difference between new and union with a single regexp
source link: https://www.codesd.com/item/ruby-regex-difference-between-new-and-union-with-a-single-regexp.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
Ruby Regex: difference between new and union with a single regexp
I have simplified the examples. Say I have a string containing the code for a regex. I would like the regex to match a literal dot and thus I want it to be:
\.
So I create the following Ruby string:
"\\."
However when I use it with Regexp.union to create my regex, I get this:
irb(main):017:0> Regexp.union("\\.")
=> /\\\./
That will match a slash followed by a dot, not just a single dot. Compare the previous result to this:
irb(main):018:0> Regexp.new("\\.")
=> /\./
which gives the Regexp I want but without the needed union.
Could you explain why Ruby acts like that and how to make the correct union of regexes ? The context of utilization is that of importing JSON strings describing regexes and union-ing them in Ruby.
Passing a string to Regexp.union
is designed to match that string literally. There is no need to escape it, Regexp.escape
is already called internally.
Regexp.union(".")
#=> /\./
If you want to pass regular expressions to Regexp.union
, don't use strings:
Regexp.union(Regexp.new("\\."))
#=> /\./
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK