code: def _get_tag_match(self, ele, tree):
          
          if tree in [None, []]:
              return [ele]
  
          res = []
          t = tree[0]
          branch = tree[1:]
          attributes = {}
  
          for attr in t:
              if isinstance(t[attr], dict):
                  if t[attr].get("type", None) == "reg":
                      t[attr] = re.compile(t[attr]['reg'])
  
          attributes.update(t)
  
          if "name" in attributes:
              del attributes['name']
          if "text" in attributes:
              del attributes['text']
          if "recursive" in attributes:
              del attributes['recursive']
          if "[]" in attributes:
              del attributes['[]']
  
          possibles = ele.find_all(
              t.get('name', None),
              text=t.get('text', None),
              attrs=attributes,
              recursive=t.get('recursive', True)
          )
  
          if not possibles:
              return None
          else:
              pass
  
          if "[]" in t:
              try:
                  possibles = eval("possibles[{}]".format(t["[]"]))
              except:
                  # no possibles
                  return None
  
          if not isinstance(possibles, list):
              possibles = [possibles]
  
          for a in possibles:
              match = self._get_tag_match(a, branch)
  
              if match:
                  res.extend(match)
  
          if not res:
              return None
          else:
              return res
docs: Match tag
  
          :param ele:
          :type ele:
          :param tree:
          :type tree: None, list
          :return:
          :rtype: None | list