# File lib/locale/tag/cldr.rb, line 38
      def self.parse(tag)
        if tag =~ /\APOSIX\Z/  # This is the special case of POSIX locale but match this regexp.
          nil
        elsif tag =~ TAG_RE
          lang, script, region, subtag = $1, $2, $3, $4

          extensions = {}
          subtag.scan(/#{EXTENSION}/i).each{|v| 
            subtag.sub!(v, "")
            key, type = v.split("=")
            extensions[key] = type
          }
          variants = subtag.scan(/#{VARIANT}/i).collect{|v| v[0].upcase}

          ret = self.new(lang, script, region, variants, extensions)
          ret.tag = tag
          ret
        else
          nil
        end
      end