【发布时间】:2014-02-16 05:39:25
【问题描述】:
使用 Ruby 1.8.7 我想在数据库中存储一些正则表达式,并在需要使用它们进行验证时轻松地将它们重组为 Regexp 对象。我发现 Ruby 表现出一些不受欢迎的行为。例如:
r = Regexp.new(/^\w+$/i) => /^\w+$/i
r_i = r.inspect => "/^\\w+$/i"
r_s = r.to_s => "(?i-mx:^\\w+$)"
r_from_r_i = Regexp.new(r_i) => /\/^\w+$\/i/
r_from_r_s = Regexp.new(r_s) => /(?i-mx:^\w+$)/
r == r_from_r_i => false
r == r_from_r_s => false
我想要的是能够以/pattern/options 的形式将Regexp 存储在数据库中,而不是(?options:pattern) 格式,因为我更熟悉前者。但是,当从一个变量创建一个新的Regexp 时,模式变得很古怪。 Ruby 正在转义 /s - 所以该模式无效。
有什么方法可以让 Ruby 在解析正则表达式时遵循 /pattern/options 格式?
【问题讨论】:
-
真的,
r_s怎么了?它不会与原始版本进行比较,但其行为完全相同。 -
@JanDvorak 你是对的!
-
我上面更新的示例突出显示了这里的真正问题。从字符串变量加载正则表达式时,当我只想让
Regexp对象按原样解析我的模式和字符串时,/s 会被转义。 -
请不要改变问题,经过这么多小时,这让我现在的努力完全模糊了。请回滚您的编辑。创建一个新帖子,我们会在那里为您提供帮助。
标签: ruby regex ruby-1.8.7