【问题标题】:Escaped Ruby regular expression gives no match when used as a literal regexp. Why?转义的 Ruby 正则表达式在用作文字正则表达式时不匹配。为什么?
【发布时间】:2012-02-03 14:28:05
【问题描述】:

代码说明一切:

teststring = "helloworld$"
string_from_user = "world$"
regexp = Regexp.escape(string_from_user) # assigns "world\\$"
p teststring =~ Regexp.new(regexp) # prints 0 => match found
p teststring =~ /regexp/ # prints nil => no match

Regexp.escape 文档中提到了第一个匹配项。 但是为什么第二个版本不匹配呢?

我很担心,因为我需要将此正则表达式传递给第三方 Ruby 代码。该字符串来自用户,所以我想转义它。然后,在某些情况下,我可能会在该用户的字符串中添加额外的正则表达式符号。例如,我可能会传递"^helloworld\\$",以便第三方代码匹配"helloworld$othercontent" 之类的字符串。

我担心如果第三方代码使用=~ /regexp/而不是=~ Regexp.new(regexp),我会遇到麻烦,因为上面的代码显示不匹配。

【问题讨论】:

    标签: ruby regex string escaping


    【解决方案1】:

    因为/regexp/ 是匹配字符串"regexp" 的正则表达式。也许你的意思是/#{regexp}/

    编辑:我认为,通过更全面地阅读您的问题,您正在将一个字符串传递给您知道将从该字符串生成正则表达式的第三方代码。在这种情况下,您应该是安全的。如上所述,/regexp/ 不可能是他们正在做的事情,因为它只是错误。他们必须使用Regexp.new() 或类似的东西。

    【讨论】:

    • 天哪! :))) 就是这样。傻我。谢谢你:)))
    猜你喜欢
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多