2009-12-13 26 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