如何在Regex中转义具有特殊含义的所有字符

时间:2014-08-21 12:11:45

标签: ruby regex

我偶然发现了以下几点,我无法理解。当您在Ruby中创建一个新的Regexp时:

Regexp.new('http://www.example.com')

它将输出以下内容:

/http:\/\/www.example.com/

这是正确的,但并没有逃脱.;这意味着它基本上允许任何角色在那个地方。通过以下方式解决这个问题:

Regexp.new(Regexp.escape('http://www.example.com'))
# => /http:\/\/www\.example\.com/

这个解决方案看起来有点奇怪,所以也许有更好的解决方案?

2 个答案:

答案 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