def initialize ( orig )
raise ArgumentError, 'Argument must be a string' unless orig.is_a?(String)
@segments = []
orig =~ /^(\\N)?(\/)?(.*?)(\\Z)?$/
str = '/' + $3
@negative = !!$1
@root = !!$2
@final = !!$4
cap = /(\(\))/
neg = /(!)/
neg_cap = /(?:#{cap}?#{neg}?|#{neg}?#{cap}?)/
while str =~ /^\/#{neg_cap}((?:\\.|[^\\\/])+)?/
m = Regexp.last_match
str = m.post_match
key = m[5]
@segments << Segment.new((key.nil?)? '' : key,
m[1] || m[3], m[2] || m[4])
end
unless str.nil? or str.empty? or str == '\\'
raise ArgumentError, "Parsing error trailing chars '#{str}' in '#{orig}'"
end
end