Regexp
A wrapper that adds shim named capture support to older versions of Ruby.
Because the named capture syntax causes a parse error, an alternate syntax is used to indicate named captures.
Ruby 1.9+ named capture syntax:
/(?<foo>[a-z]+)/
Ruby 1.8 shim syntax:
/(?:<foo>[a-z]+)/
Wraps Regexp with named capture support.
# File lib/rack/mount/regexp_with_named_groups.rb, line 30 def initialize(regexp) regexp = Regexp.compile(regexp) unless regexp.is_a?(Regexp) source, options = regexp.source, regexp.options @names, scanner = [], StringScanner.new(source) while scanner.skip_until(/\(/) if scanner.scan(/\?:<([^>]+)>/) @names << scanner[1] elsif scanner.scan(/\?(i?m?x?\-?i?m?x?)?:/) # ignore noncapture else @names << nil end end source.gsub!(/\?:<([^>]+)>/, '') @names = [] unless @names.any? @names.freeze super(source, options) end
# File lib/rack/mount/regexp_with_named_groups.rb, line 64 def eql?(other) super && @names.eql?(other.names) end
Generated with the Darkfish Rdoc Generator 2.