docs: def find_all(soup, name=None, attrs=None, recursive=True, text=None,
                limit=None, **kwargs):
      """The `find` and `find_all` methods of `BeautifulSoup` don't handle the
      `text` parameter combined with other parameters. This is necessary for
      e.g. finding links containing a string or pattern. This method first
      searches by text content, and then by the standard BeautifulSoup arguments.
  
      """
      if text is None:
          return soup.find_all(
              name, attrs or {}, recursive, text, limit, **kwargs
          )
      if isinstance(text, string_types):
          text = re.compile(re.escape(text), re.I)
      tags = soup.find_all(
          name, attrs or {}, recursive, **kwargs
      )
      rv = []
      for tag in tags:
          if match_text(text, tag):
              rv.append(tag)
          if limit is not None and len(rv) >= limit:
              break
      return rv