另一种方法,而不是逃避正则表达式模式?

4c8rllxm  于 2022-10-15  发布在  Ruby
关注(0)|答案(3)|浏览(188)

通常,当我的正则表达式模式如下所示时:

http://www.microsoft.com/

然后我必须像这样逃离它:

string.match(/http:\/\/www\.microsoft\.com\//)

除了像那样逃脱之外,还有其他方法吗?
我希望能够像这样使用它,因为我不想转义所有模式中的所有特殊字符。

jutyujz0

jutyujz01#

您还可以在Ruby中为正则表达式使用任意分隔符,方法是使用%r并在正则表达式前定义一个字符,例如:

%r!http://www.microsoft.com/!
euoag5mw

euoag5mw2#

Regexp.quoteRegexp.escape可用于自动为您转义:
Https://ruby-doc.org/core/Regexp.html#method-c-escape
可以将结果传递给Regexp.new以创建一个Regexp对象,然后可以调用该对象的.match方法并将匹配的字符串传递给它(与string.match(/regex/)的顺序相反)。

afdcj2ne

afdcj2ne3#

Regexp.new(Regexp.quote('http://www.microsoft.com/'))

Regexp.quote只是对具有特殊regexp含义的任何字符进行转义;它接受并返回一个字符串。请注意,.也很特殊。引用之后,您可以根据需要附加到regexp,然后再传递给构造函数。一个简单的例子:

Regexp.new(Regexp.quote('http://www.microsoft.com/') + '(.*)')

这将为路径的其余部分添加捕获组。

相关问题