2009-12-13 20 views
18

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

(私はR /何とか/何とか/のようなものだと思います)

...と1 WHY地球上で私に言うことができる誰にでもstring.subはちょうど最初のマッチを置き換えるのでしょうか?

+1

同じ理由であることPerlは置換をグローバルにするために 'g'修飾子が必要です。すべてを置き換えるのは、しばしばあなたが望むものですが、常にそうとは限りません。 – Telemachus

答えて

48

String.gsubトリックを行う必要があります。

gsub(pattern, replacement) → new_str

第二引数に代入パターン の すべて出現とSTRのコピーを返します

:ドキュメントを引用

。パターンは通常 正規表現です。文字列として指定された場合、それに含まれる正規表現のメタキャラクタは、 がそのまま解釈されます。 \\dは数字の代わりにdの後に バックラッシュと一致します。

+4

w00t。ありがとう。あなたは、サブがデフォルトとしてそれを行い、最初のN個のオカレンスを置き換えるためのintパラメータを持っていると思います! – DJTripleThreat

+4

DJ:そうではありません。最初の試合を交換したい場合は、** SUB ** stituteを選択してください。** G ** lobal ** SUB ** stituteをお選びください。 –

+0

さらに詳しくは、[manual page](http://www.ruby-doc.org/core-2.1.1/String.html#method-i-gsub)を参照してください。 –

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

うわー、私は何年も前からルビーとレールを使ってきた。今日私はあなたの投稿のために何か#メソッドをタイプした最初の時でした。私は機能がそこにあったことを知らなかった!用語をグーグルで見つけて、そのような方法で文書を見つけてください。 –

関連する問題