在其他语言中,在RegExp中,可以使用/.../g进行全局匹配.

然而,在Ruby中:

"hello hello".match /(hello)/

只有一个问候.

我如何捕捉所有hello个?

推荐答案

你可以使用扫描法.scan方法将为您提供一个包含所有匹配项的数组,或者,如果您向其传递一个块,则将每个匹配项传递给该块.

"hello1 hello2".scan(/(hello\d+)/)   # => [["hello1"], ["hello2"]]

"hello1 hello2".scan(/(hello\d+)/).each do|m|
  puts m
end

我已经写过这个方法,你可以在接近文章结尾的here页阅读.

Ruby相关问答推荐

ruby 3.1:使用方法(:名称)简化代码莫名其妙地失败

Ruby - 使用索引值识别和更新数组中的重复项

使用 Ruby 仅删除数组中的特定重复项

Ruby:如何在 vanilla ruby​​ 中使用有效支持日期?

字符串长度多显示一个字符 - ruby

独立于 Rails 使用 HAML 文件中的布局

将 ruby​​ hash .default 设置为列表

差异 - unless/if

C# ?? Ruby 中的运算符?

从Electron邮件中删除签名和回复

与 String 相比,在 Ruby 中使用 StringIO 有哪些优势?

require File.expand_path(..., __FILE__) 是最佳实践吗?

Ruby注入初始为哈希

Bundle不适用于 rbenv

是什么让 Ruby 变慢了?

向实例对象添加方法

如何使用#{variable}在Ruby中格式化带有浮点数的字符串?

更好的 ruby​​ markdown 解释器?

如何解决/usr/bin/env: ruby​​_executable_hooks: No such file or directory?

如何在ruby脚本中隐藏终端的密码输入