module Regexp::Parser
def self.interval(target_node, token)
def self.interval(target_node, token) text = token.text mchr = text[text.length-1].chr =~ /[?+]/ ? text[text.length-1].chr : nil mode = case mchr when '?'; text.chop!; :reluctant when '+'; text.chop!; :possessive else :greedy end range = text.gsub(/\{|\}/, '').split(',', 2).each {|i| i.strip} min = range[0].empty? ? 0 : range[0] max = range[1] ? (range[1].empty? ? -1 : range[1]) : min target_node.quantify(:interval, text, min.to_i, max.to_i, mode) end