7

正規表現の一致をループし、ループ内の各一致を個別に置き換えたいと思います。

例えば:

content.scan(/myregex/).each do |m|
  m = 'new str'
end

どうすればそれができますか?

私がそうしたい理由は、各一致が関数からの異なる出力に置き換えられるからです。

手伝ってくれてありがとう

4

2 に答える 2

6

メソッドの次の形式は、gsubまさにあなたが望むことを行います:

gsub(pattern) {|match| block } → new_str

ドキュメントについては、 http://ruby-doc.org/core-2.0.0/String.html#method-i-gsubを参照してください。

于 2013-09-20T00:53:31.200 に答える
0

毎回同じものを探している場合は、次のようにすることができます。

def some_function_here(args)
    .... some logic creates replacement
    while something == true
        content.sub(/myregex/, replacement)
        .... some logic to change replacement/or a call to a helper function
    end
end

新しい置換値をどのように生成しているかはわかりませんが、私が集めたものから、それを行う最も簡単な方法は、正規表現の文字列でサブメソッドを呼び出し、一度に 1 つずつ置き換えることです。

于 2013-09-20T00:46:09.807 に答える