通常,当我的正则表达式模式如下所示时:
http://www.microsoft.com/
然后我必须像这样逃离它:
string.match(/http:\/\/www\.microsoft\.com\//)
除了像那样逃脱之外,还有其他方法吗?我希望能够像这样使用它,因为我不想转义所有模式中的所有特殊字符。
jutyujz01#
您还可以在Ruby中为正则表达式使用任意分隔符,方法是使用%r并在正则表达式前定义一个字符,例如:
%r!http://www.microsoft.com/!
euoag5mw2#
Regexp.quote或Regexp.escape可用于自动为您转义:Https://ruby-doc.org/core/Regexp.html#method-c-escape可以将结果传递给Regexp.new以创建一个Regexp对象,然后可以调用该对象的.match方法并将匹配的字符串传递给它(与string.match(/regex/)的顺序相反)。
Regexp.quote
Regexp.escape
Regexp.new
.match
string.match(/regex/)
afdcj2ne3#
Regexp.new(Regexp.quote('http://www.microsoft.com/'))
Regexp.quote只是对具有特殊regexp含义的任何字符进行转义;它接受并返回一个字符串。请注意,.也很特殊。引用之后,您可以根据需要附加到regexp,然后再传递给构造函数。一个简单的例子:
.
Regexp.new(Regexp.quote('http://www.microsoft.com/') + '(.*)')
这将为路径的其余部分添加捕获组。
3条答案
按热度按时间jutyujz01#
您还可以在Ruby中为正则表达式使用任意分隔符,方法是使用%r并在正则表达式前定义一个字符,例如:
euoag5mw2#
Regexp.quote
或Regexp.escape
可用于自动为您转义:Https://ruby-doc.org/core/Regexp.html#method-c-escape
可以将结果传递给
Regexp.new
以创建一个Regexp对象,然后可以调用该对象的.match
方法并将匹配的字符串传递给它(与string.match(/regex/)
的顺序相反)。afdcj2ne3#
Regexp.quote
只是对具有特殊regexp含义的任何字符进行转义;它接受并返回一个字符串。请注意,.
也很特殊。引用之后,您可以根据需要附加到regexp,然后再传递给构造函数。一个简单的例子:这将为路径的其余部分添加捕获组。