web-dev-qa-db-ja.com

Rubyでパターンのすべてのインスタンスを置き換えるにはどうすればよいですか?

string.subは、最初のインスタンスを置き換えるだけのようです。それまたはすべてのパターンを置き換えることができる別の方法のオプションはありますか?あなたはperlのような正規表現の中でそれを行うことができますか?

(r/blah/blah /のようなものだと思います)

...そして、なぜ地球にいるのか教えてくれる人に+1してくださいstring.sub最初の一致のみを置き換えますか?

29
aarona

String.gsub でうまくいくはずです。

引用文書:

gsub(pattern, replacement) → new_str

2番目の引数をall個のパターンに置き換えたstrのコピーを返します。パターンは通常、正規表現です。文字列として指定した場合、それに含まれる正規表現のメタ文字は文字どおりに解釈されます。 \\dは、数字の代わりに、バックラッシュとそれに続くdに一致します。

65
Brian Young

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.
6
Gareth