据我所知,捕获组(?: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
答案 0 :(得分:4)
这是非贪婪的扩张。 A trailing ?
converts *
and +
from greedy to non-greedy。非贪婪的通配符将选择最小的匹配字符集,而不是最大的匹配字符集。有关说明,请参阅this blog