对于Rails应用程序中的管理功能,我希望能够在数据库中存储正则表达式(作为字符串),并通过标准控制器操作添加它们。
我遇到了两个问题:
1)Rails参数过滤器似乎是自动转义反斜杠(转义字符),这会混淆正则表达式。例如:
\s{1,2}(foo)
变为:
\\s{1,2}(foo)
2)然后我尝试将write_attribute用于带有单个反斜杠的双反斜杠的gsub实例(基本上是对它们进行转义)。事实证明这比预期的要复杂得多。 (如果重要的话,我正在使用Ruby 1.9.2)。我发现的一些事情:
"hello\\world".gsub(/\\/, ' ') #=> "hello world"
"hello\\world".gsub(/\\/, "\\") #=> "hello\\world"
"hello\\world".gsub(/\\/, '\\') #=> "hello\\world"
我要做的是:
"hello\\world".gsub(/\\/, something) #=> "hello\world"
我很想知道这两种解决方案。
1)如何安全地将正则表达式作为参数传递并存储到Rails控制器操作中?
2)如何用一个反斜杠替换双反斜杠?
答案 0 :(得分:3)
简而言之,您不能用字符串中的单个反斜杠替换双反斜杠,因为字符串中的单个反斜杠是转义字符。你能做的是以下几点:
Regexp.new("hello\\world") #=> /hello\world/
这会将您的字符串转换为正则表达式。这意味着:将正则表达式存储为字符串(使用转义字符),并在要与它们进行比较时将它们转换为正则表达式:
regexp = "\\s{1,2}(foo)"
reg = Regexp.new(regexp) #=> /\s{1,2}(foo)/
" foo" =~ reg #=> 0