code: public Stream<HString> findAllPatterns(@NonNull TokenRegex regex) {
        return Streams.asStream(new Iterator<HString>() {
           TokenMatcher m = regex.matcher(HString.this);
           HString nextMatch = null;
  
           private boolean advance() {
              if (nextMatch == null && m.find()) {
                 nextMatch = m.group();
              }
              return nextMatch != null;
           }
  
           @Override
           public boolean hasNext() {
              return advance();
           }
  
           @Override
           public HString next() {
              if (!advance()) {
                 throw new NoSuchElementException();
              }
              HString toReturn = nextMatch;
              nextMatch = null;
              return toReturn;
           }
        });
     }
docs: Finds all matches to the given token regular expression in this HString.
  
  @param regex the token regex to match
  @return Stream of matches