2009-12-13 32 views
18

string.sub看起來只是代替了第一個實例。有沒有一種方法可以替代所有模式?你可以在perl中像正則表達式那樣做嗎?如何替換紅寶石中的每個模式實例?

(我認爲像R /等等/等等/)

...和+1的人誰可以告訴我爲什麼在地球上string.sub只更換第一場比賽?

+1

出於同樣的原因, Perl需要一個'g'修飾符來使替換成爲全局的。取代所有往往是你想要的,但並非總是如此。 – Telemachus 2009-12-13 01:39:22

回答

48

String.gsub應該做的伎倆。

引用文檔:

gsub(pattern, replacement) → new_str

返回STR的副本與所有出現圖案 的作爲第二個參數被取代。該模式通常是 正則表達式;如果以字符串形式給出,那麼它將包含的任何正則表達式元字符將按字面解釋,例如, \\d將匹配 反衝,然後是d,而不是一個數字。

+4

w00t。謝謝。你可能會認爲這個子程序會將它作爲默認值,然後用int參數替換前N個事件! – DJTripleThreat 2009-12-13 01:36:27

+4

DJ:不,你不會。如果你想替換第一場比賽,那麼** SUB **替補是你的選擇,如果不是** G ** lobal ** SUB **替補是你的選擇。 – 2009-12-13 01:42:58

+0

如需進一步參考,請參考[手冊頁](http://www.ruby-doc.org/core-2.1.1/String.html#method-i-gsub)。 – 2014-05-07 11:59:49

5

我可以解釋爲什麼sub只是取代了圖案的第一場比賽,但我認爲文件不就好多了(從ri String#sub在命令行上):

str.sub(pattern, replacement)   => new_str 
str.sub(pattern) {|match| block }  => new_str 

Returns a copy of _str_ with the _first_ occurrence of _pattern_ 
replaced with either _replacement_ or the value of the block. 
+4

哇,我一直在使用紅寶石和鐵軌多年。今天是我第一次輸入ri#方法,因爲你的帖子。我不知道那個功能在那裏!只是使用Google搜索條款並以這種方式找到文檔。 – 2015-05-29 07:18:08