Ruby 另一种代替转义正则表达式模式的方法?

Ruby 另一种代替转义正则表达式模式的方法?,ruby,regex,Ruby,Regex,通常当我的正则表达式模式如下所示时: http://www.microsoft.com/ string.match(/http:\/\/www\.microsoft\.com\//) 然后我必须像这样逃离它: http://www.microsoft.com/ string.match(/http:\/\/www\.microsoft\.com\//) 有没有别的办法,而不是像那样逃避呢 我希望能够像这样使用它,因为我不想逃避我所有模式中的所有特殊字符 Regexp.new(Regexp

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

http://www.microsoft.com/
string.match(/http:\/\/www\.microsoft\.com\//)
然后我必须像这样逃离它:

http://www.microsoft.com/
string.match(/http:\/\/www\.microsoft\.com\//)
有没有别的办法,而不是像那样逃避呢

我希望能够像这样使用它,因为我不想逃避我所有模式中的所有特殊字符

Regexp.new(Regexp.quote('http://www.microsoft.com/'))
简单地转义任何具有特殊regexp含义的字符;它接受并返回一个字符串。请注意,
也是特殊的。在引用之后,您可以根据需要在传递给构造函数之前追加到regexp。一个简单的例子:

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

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

Regexp.quote
Regexp.escape
可用于为您自动转义:


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

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

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

您可以简单地使用单引号进行转义

string.match('http://www.microsoft.com/')
如果文本本身需要单引号,也可以使用
%q{}
。如果需要在字符串中外推变量,请使用
%Q{}
。这相当于双引号

如果字符串包含要外推的正则表达式(例如:
*?()[]^$
),请使用//或%r{}

,以方便我定义

def regexcape(s)
  Regexp.new(Regexp.escape(s))
end

虽然这有助于避免转义
/
字符,但对于圆括号、方括号和其他特殊字符则没有帮助。当然,这同样有效:
string.match(/#{Regexp.quote('http://www.microsoft.com/')}/)
用四位数的年份捕获组替换所有“当前年份”令牌:
Regexp.new(input_string.split(“CURRENT_YEAR”).map{p | Regexp.quote(p)}.join(“(\\d{4})”)
既然如此,这个是否应该返回success?如果Regexp.new(Regexp.quote('.')).match('A'),则放“success”。)