通常当我的正则表达式模式如下:
http://www.microsoft.com/
然后我必须像这样逃避它:
string.match(/http:\/\/www\.microsoft\.com\//)
还有其他方式而不是像那样逃避吗?
我希望能够像http://www.microsoft.com一样使用它,因为我不想逃避所有模式中的所有特殊字符。
答案 0 :(得分:63)
Regexp.new(Regexp.quote('http://www.microsoft.com/'))
Regexp.quote
只是逃避任何具有特殊正则表达式含义的字符;它需要并返回一个字符串。请注意,.
也很特殊。引用之后,您可以在传递给构造函数之前根据需要附加到regexp。一个简单的例子:
Regexp.new(Regexp.quote('http://www.microsoft.com/') + '(.*)')
这会为路径的其余部分添加一个捕获组。
答案 1 :(得分:9)
通过使用%r并在正则表达式之前定义一个字符,您还可以在Ruby中使用任意分隔符作为正则表达式,例如:
%r!http://www.microsoft.com/!
答案 2 :(得分:5)
Regexp.quote
或Regexp.escape
可用于为您自动转义:
http://ruby-doc.org/core/classes/Regexp.html#M001195
可以将结果传递给Regexp.new
以创建Regexp对象,然后可以调用对象的.match
方法并将其传递给匹配的字符串(与{{1}相反的顺序) })。
答案 3 :(得分:0)
您可以简单地使用单引号进行转义。
string.match('http://www.microsoft.com/')
如果您在文本中需要单引号,也可以使用%q{}
。如果您需要在字符串中外推变量,请使用%Q{}
。这相当于双引号"
。
如果字符串包含您想要外推的正则表达式(例如:.*?()[]^$
),请使用//或%r {}
答案 4 :(得分:-2)
为方便起见,我只需定义
def regexcape(s)
Regexp.new(Regexp.escape(s))
end