循环扫描并单独替换匹配

Alj*_*jaz 5 ruby regex

我想循环通过正则表达式匹配并在循环中单独替换每个匹配.

例如:

content.scan(/myregex/).each do |m|
  m = 'new str'
end
Run Code Online (Sandbox Code Playgroud)

我怎么能这样做?

我想这样做的原因是因为每个匹配将被替换为函数的不同输出.

感谢帮助

Pet*_*vin 6

以下形式的gsub方法将完全符合您的要求:

gsub(pattern) {|match| block } ? new_str
Run Code Online (Sandbox Code Playgroud)

有关文档,请参见http://ruby-doc.org/core-2.0.0/String.html#method-i-gsub.


BWS*_*rns 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
Run Code Online (Sandbox Code Playgroud)

不确定如何生成新的替换值,但从我收集的情况来看,最简单的方法似乎是在正则表达式的字符串上调用 sub 方法并一次替换它们。