Ruby Regex MatchData对象捕获奇怪的行为方法

时间:2015-12-14 01:09:16

标签: ruby-on-rails ruby regex

所以如果你采用Ruby 2.1.2正则表达式对象

reg = /(?!gemspec)gem.*/

并在如下所示的行上调用匹配:

"gem 'wirble', :group => :development"

您将获得以下MatchData对象:

 #<MatchData "gem 'wirble', :group => :development"> 

如果你打电话

 reg.match("gem 'wirble', :group => :development").to_a
 => ["gem 'wirble', :group => :development"] 

但如果你打电话

reg.match("gem 'wirble', :group => :development").captures
 => [] 

MatchData(http://ruby-doc.org/core-2.1.2/MatchData.html#method-i-captures)的文档声明#captures方法应该返回与该Regex调用返回的匹配对象上的#to_a方法相同的值。在这种情况下,它不会出现这种情况。为什么会出现差异?这是一个错误吗?

帖子非常简洁,如果您需要任何其他解释,请告诉我们!

1 个答案:

答案 0 :(得分:5)

这不是错误。它实际上工作正常。 #captures仅返回已捕获的内容,这意味着圆括号()内的群组匹配的内容。如果您将正则表达式修改为/(?!gemspec)gem(.*)/(请注意(.*)部分),reg.match("gem 'wirble', :group => :development").captures将返回[" 'wirble', :group => :development"]