class Regexp::Expression::Quantifier

def derived_data

def derived_data
  @derived_data ||= begin
    min, max =
      case text[0]
      when '?'; [0, 1]
      when '*'; [0, -1]
      when '+'; [1, -1]
      else
        int_min = text[/\{(\d*)/, 1]
        int_max = text[/,?(\d*)\}/, 1]
        [int_min.to_i, (int_max.empty? ? -1 : int_max.to_i)]
      end
    mod = text[/.([?+])/, 1]
    mode = (mod == '?' && :reluctant) || (mod == '+' && :possessive) || :greedy
    { min: min, max: max, mode: mode }
  end
end