ruby - 如何在 ruby​​ 中像 Rubular 一样获取匹配组而不拆分字符串

标签 ruby regex rubular named-captures

Rubular ( Example ) 如何获取匹配组?

/regex(?<named> .*)/.match('some long string')

match方法(在示例中)仅返回第一个匹配项。

scan方法返回一个没有命名捕获的数组。

获取命名捕获数组(不分割)的最佳方法是什么?

最佳答案

我一直认为 Rubular 的工作原理是这样的:

matches = []

"foobar foobaz fooqux".scan(/foo(?<named>\w+)/) do
  matches << Regexp.last_match
end

p matches
# => [ #<MatchData "foobar" named:"bar">,
#      #<MatchData "foobaz" named:"baz">,
#      #<MatchData "fooqux" named:"qux"> ]

如果我们使用 enum_for$~ (Regexp.last_match 的别名),我们可以让它更加 Rubyish:

matches = "foobar foobaz fooqux".enum_for(:scan, /foo(?<named>\w+)/).map { $~ }

关于ruby - 如何在 ruby​​ 中像 Rubular 一样获取匹配组而不拆分字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38493113/

相关文章:

ruby - 使用 ruby​​ 在正则表达式中选择一个字符串

ruby-on-rails - $redis 全局变量与 ruby​​ on rails

php preg_split 忽略重复的分隔符

javascript - 正则表达式模式,用于检查字符串中每个单词的第一个字母,如果它在 Javascript 中是大写的

ruby - 我需要一个正则表达式来找到一个不在任何 html 标签或任何 html 标签的属性值内的 url

ruby-on-rails - 为什么我在安装 PaperClip 时得到一个 "undefined method for ` has_attached_file`?

ruby-on-rails - 设计使用什么密码哈希算法?

ruby-on-rails - 编写 gem 时需要源文件的最佳方法是什么

Python处理字符串匹配