def extract(str, schemes = nil)
      if block_given?
        str.scan(make_regexp(schemes)) { yield $& }
        nil
      else
        result = []
        str.scan(make_regexp(schemes)) { result.push $& }
        result
      end
    end
def extract(str, schemes = nil)
      if block_given?
        str.scan(make_regexp(schemes)) { yield $& }
        nil
      else
        result = []
        str.scan(make_regexp(schemes)) { result.push $& }
        result
      end
    end
:call-seq:
   extract( str )
   extract( str, schemes )
   extract( str, schemes ) {|item| block }

 == Args

 +str+::
    String to search
 +schemes+::
    Patterns to apply to +str+

 == Description

 Attempts to parse and merge a set of URIs
 If no +block+ given , then returns the result,
 else it calls +block+ for each element in result.

 see also URI::Parser.make_regexp