如何将Ruby范围转换为正则表达式(附代码)

75 阅读1分钟

最近我注意到,没有一个Rubyß库可以将Ruby范围转换为正则表达式。这就是为什么我决定自己写这个库,这篇文章只是分享这个库的链接和一些如何使用这个库的例子。

问题

假设你有一个Ruby范围,并且必须将其转换为正则表达式。例如,你有-9..9 ,并要得到/-[1-9]|\d/ 。乍一看,这个解决方案看起来相当简单,但如果你不知道有什么算法,要得到一个优化的解决方案,就需要花费大量的时间。

最近,我不得不解决这样一个问题,说实话,我无法在2小时内解决这个任务。然后我开始在谷歌上搜索一个现成的解决方案,最后我发现它在Python中的实现。感谢我的好奇心,我已经学会了Python,可以在1小时内将算法翻译成Ruby。最后我发布了一个带有该算法的gem。

所以,如果你有这个问题,这个 gem 可能对你有帮助。

解决方案

这些是它的几个使用例子:

require 'range_regexp'
converter = RangeRegexp::Converter.new(-9..9)
converter.convert # => /-[1-9]|\d/
converter = RangeRegexp::Converter.new(12..3456)
converter.convert # =>/1[2-9]|[2-9]\d|[1-9]\d{2}|[1-2]\d{3}|3[0-3]\d{2}|34[0-4]\d|345[0-6]/

结论

现在我们可以使用Ruby轻松地将范围转换为正则表达式。你不需要重新发明一个轮子,只要得到这个宝石并使用它。如果你有任何建议或问题,可以随时联系我。