我偶然发现了以下几点,我无法理解。当您在Ruby中创建一个新的Regexp时:
Regexp.new('http://www.example.com')
它将输出以下内容:
/http:\/\/www.example.com/
这是正确的,但并没有逃脱.
;这意味着它基本上允许任何角色在那个地方。通过以下方式解决这个问题:
Regexp.new(Regexp.escape('http://www.example.com'))
# => /http:\/\/www\.example\.com/
这个解决方案看起来有点奇怪,所以也许有更好的解决方案?
答案 0 :(得分:6)
你可以这样做:
Regexp.escape('http://www.example.com')
这将返回完全转义的字符串
答案 1 :(得分:2)
或者,如果您只需要检查给定文本是否包含指定的网址,则可以使用String#include?
,然后完全删除正则表达式。请记住,Ruby只会进行简单的字符串比较,这也应该更快。
# before
if text =~ Regexp.new(Regexp.escape('http://www.example.com'))
...
end
# after
if text.include?('http://www.example.com')
...
end