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

nev*_*ame 26 ruby regex

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

http://www.microsoft.com/
Run Code Online (Sandbox Code Playgroud)

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

string.match(/http:\/\/www\.microsoft\.com\//)
Run Code Online (Sandbox Code Playgroud)

有没有其他方式而不是像那样逃避它?

我希望能够像http://www.microsoft.com一样使用它,因为我不想逃避所有模式中的所有特殊字符.

Mat*_*hen 65

Regexp.new(Regexp.quote('http://www.microsoft.com/'))
Run Code Online (Sandbox Code Playgroud)

Regexp.quote只是逃避任何具有特殊正则表达式含义的字符; 它需要并返回一个字符串.请注意,这.也很特别.引用之后,您可以在传递给构造函数之前根据需要附加到regexp.一个简单的例子:

Regexp.new(Regexp.quote('http://www.microsoft.com/') + '(.*)')
Run Code Online (Sandbox Code Playgroud)

这会为路径的其余部分添加捕获组.

  • 当然这也有效:`string.match(/#{Regexp.quote('http://www.microsoft.com/')} /)` (6认同)

小智 9

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

%r!http://www.microsoft.com/!
Run Code Online (Sandbox Code Playgroud)

  • 虽然这有助于避免转义`/`字符,但它对括号,括号和其他特殊字符之类的东西没有帮助. (6认同)

Amb*_*ber 5

Regexp.quote或者Regexp.escape可以用来为你自动逃脱:

http://ruby-doc.org/core/classes/Regexp.html#M001195

结果可以传递给Regexp.new创建一个Regexp对象,然后你可以调用该对象的.match方法并传递它匹配的字符串(相反的顺序string.match(/regex/)).