Ruby Regexp: разница между new и union с одним регулярным выражением

Я упростил примеры. Скажем, у меня есть строка, содержащая код для регулярного выражения. Я хочу, чтобы регулярное выражение соответствовало буквальной точке, и поэтому я хочу, чтобы это было:

\.

Итак, я создаю следующую строку Ruby:

"\\."

Однако, когда я использую ее с Regexp.union для создания моего регулярного выражения, я получаю следующее:

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

Это будет соответствовать косой черте, за которой следует точка, а не просто одной точке. Сравните предыдущий результат с этим:

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

, который дает желаемое регулярное выражение, но без необходимого объединения.

Не могли бы вы объяснить, почему Ruby действует так и как правильно объединять регулярные выражения? Контекст использования - это импорт строк JSON, описывающих регулярные выражения, и их объединение в Ruby.

5
задан Ludovic Kuty 16 October 2011 в 13:55
поделиться