2010-08-19 47 views

回答

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

Regexp.quote只是轉義任何具有特殊正則表達式含義的字符;它需要並返回一個字符串。請注意0​​也是特別的。引用後,可以在傳遞給構造函數之前根據需要追加到正則表達式。一個簡單的例子:

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

這爲路徑的其餘部分添加了一個捕獲組。

+5

當然,這也工作:'string.match (/#{Regexp.quote('http://www.microsoft.com/')} /)' – 2013-08-21 09:29:21

+0

用四位數年份捕獲組替換所有「CURRENT_YEAR」標記:Regexp.new(input_string.split 「CURRENT_YEAR」)。map {| p | Regexp.quote(p)} .join(「(\\ d {4})」))' – 2017-05-05 16:18:31

+0

鑑於此,不應該返回成功嗎? 如果Regexp.new(Regexp.quote('。'))。匹配('A')會提示「成功」 – Joe 2017-12-10 10:31:37

4

Regexp.quoteRegexp.escape可以用來自動地逃脫你的東西:

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

結果可以傳遞給Regexp.new創建一個RegExp對象,然後就可以調用該對象的.match方法和通它是匹配的字符串(與string.match(/regex/)相反的順序)。

8

您還可以通過使用%r和正則表達式之前定義的字符,例如使用正則表達式在Ruby中的任意分隔符:

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

雖然這有助於避免轉義字符的轉義,但對括號,括號和其他特殊字符。 – Amber 2010-08-19 01:59:46

+3

「http://www-microsoft.com/」匹配。危險的。 – kuboon 2015-09-14 08:57:47

0

您可以簡單地使用單引號逃逸。

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

如果您在文本本身需要單引號,您還可以使用%q{}。如果您需要在字符串內外推變量,請使用%Q{}。這相當於雙引號"。 如果字符串包含正則表達式(如:.*?()[]^$)你想推斷,使用//或%R {}

-2

爲了方便我只定義

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