13

Ruby Regex: difference between new and union with a single regexp

 2 years ago
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.
neoserver,ios ssh client

Ruby Regex: difference between new and union with a single regexp

advertisements

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("\\."))
#=> /\./


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK