?在捕获组的末尾

时间:2013-01-03 04:30:33

标签: ruby regex

据我所知,捕获组(?:pattern)开头的问号表示此模式不应该创建反向引用,但是在下面的示例中,问号在结尾处是什么意思?在通配符后捕获组?

  self =~ /(.*?)_(\d+)$/

代码

class String
# used to instantiate a model based on a dom_id style
# identifier like "person_10"
  def to_model
    self =~ /(.*?)_(\d+)$/
    class_name, id = $1, $2
    class_name.classify.constantize.find(id)
  end
end

1 个答案:

答案 0 :(得分:4)

这是非贪婪的扩张。 A trailing ? converts * and + from greedy to non-greedy。非贪婪的通配符将选择最小的匹配字符集,而不是最大的匹配字符集。有关说明,请参阅this blog