docs: def extractTagsAndParams(self, elements, text, matches):
  		"""
  		Replaces all occurrences of HTML-style comments and the given tags
  		in the text with a random marker and returns teh next text. The output
  		parameter $matches will be an associative array filled with data in
  		the form:
  		  'UNIQ-xxxxx' => array(
  		  'element',
  		  'tag content',
  		  array( 'param' => 'x' ),
  		  '<element param="x">tag content</element>' ) )
  		"""
  		stripped = u''
  
  		taglist = u'|'.join(elements)
  		if taglist not in _startRegexHash:
  			_startRegexHash[taglist] = re.compile(ur"<(" + taglist + ur")(\s+[^>]*?|\s*?)(/?>)|<(!--)", re.UNICODE | re.IGNORECASE)
  		start = _startRegexHash[taglist]
  
  		while text != u'':
  			p = start.split(text, 1)
  			stripped += p[0]
  			if len(p) == 1:
  				break
  			elif p[4]:
  				# comment
  				element = p[4]
  				attributes = u''
  				close = u''
  			else:
  				element = p[1]
  				attributes = p[2]
  				close = p[3]
  			inside = p[5]
  
  			global _extractTagsAndParams_n
  			marker = self.uniq_prefix + u'-' + element + u'-' + (u"%08X" % _extractTagsAndParams_n) + u'-QINU'
  			_extractTagsAndParams_n += 1
  			stripped += marker
  
  			if close == u'/>':
  				# empty element tag, <tag />
  				content = None
  				text = inside
  				tail = None
  			else:
  				if element == u'!--':
  					end = _endCommentPat
  				else:
  					if element not in _endRegexHash:
  						_endRegexHash[element] = re.compile(ur'(</' + element + ur'\s*>)', re.UNICODE | re.IGNORECASE)
  					end = _endRegexHash[element]
  				q = end.split(inside, 1)
  				content = q[0]
  				if len(q) < 3:
  					# no end tag
  					tail = ''
  					text = ''
  				else:
  					tail = q[1]
  					text = q[2]
  
  			matches[marker] = (
  				element,
  				content,
  				self.decodeTagAttributes(attributes),
  				u"<" + element + attributes + close + content + tail
  			)
  		return stripped