gpt4 book ai didi

ruby - 转义的 Ruby 正则表达式在用作文字正则表达式时不匹配。为什么?

转载 作者:太空宇宙 更新时间:2023-11-03 17:12:15 25 4
gpt4 key购买 nike

代码说明了一切:

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),我会很麻烦,因为如上面的代码所示,将没有匹配项。

最佳答案

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

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

关于ruby - 转义的 Ruby 正则表达式在用作文字正则表达式时不匹配。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9130174/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com