2015-05-22 17 views
0

我經常看到正在調用的gsub函數,其模式參數以正斜槓包圍。例如:在Ruby中使用GSUB和正斜槓使用

>> phrase = "*** and *** ran to the @@@." 
>> phrase.gsub(/\*\*\*/, "WOOF") 
=> "WOOF and WOOF ran to the @@@." 

我想也許這已經是與逃逸星號,但使用單引號和雙引號的作品一樣好:

>> phrase = "*** and *** ran to the @@@." 
>> phrase.gsub('***', "WOOF") 
=> "WOOF and WOOF ran to the @@@." 

>> phrase.gsub("***", "WOOF") 
=> "WOOF and WOOF ran to the @@@." 

難道只是約定使用斜線?我錯過了什麼?

+0

如果你不想做轉義工作,你可以用'Regexp.escape(「***」)來幫助你自己(結果是'\ * \ * \ *'') – knut

回答

0

如果您需要使用正則表達式,請使用正斜槓。

如果您使用的字符串參數爲gsub,它只會進行純字符匹配。

在您的示例中,使用正則表達式時需要反斜槓以避免星號,因爲星號在正則表達式中有特殊含義(可以任意匹配任意次數)。使用字符串時,它們不是必需的,因爲它們完全匹配。

在你的例子中,你可能不需要使用正則表達式,因爲它是一個簡單的模式。但是,如果你想匹配***只有當它是在一個字符串的開頭(例如,在您的例子中,第一束),那麼你將要使用正則表達式,例如:

phrase.gsub(/^\*{3}/, "WOOF") 

欲瞭解更多信息有關正則表達式,請參閱:http://www.regular-expressions.info/

有關在Ruby中使用正則表達式的更多信息,請參閱:http://ruby-doc.org/core-2.2.0/Regexp.html

要在Ruby中使用正則表達式,請嘗試:http://rubular.com/

0

你缺少閱讀文檔:

模式通常是一個正則表達式;如果以字符串的形式給出,它所包含的任何正則表達式元字符將按字面解釋,例如, '\ d'會匹配一個反彈,然後是'd',而不是一個數字。

http://ruby-doc.org/core-2.1.4/String.html#method-i-gsub

換句話說,你可以給一個字符串或正則表達式。正則表達式可以用幾種方法分隔:

正則表達式使用/.../和%r {...}文字以及Regexp :: new構造函數創建。

備用%r分隔符http://ruby-doc.org/core-2.2.2/Regexp.html

%r的好處是你通常可以發現,不與模式字符,這將迫使他們逃離,在你的榜樣碰撞的分隔符。

*必須轉義,因爲它在正則表達式中有特殊含義,但是在字符串中它沒有。