code: public static Pattern and(final Pattern... patterns) {
      return new Pattern() {
        @Override public int match(CharSequence src, int begin, int end) {
          int ret = 0;
          for (Pattern pattern : patterns) {
            int l = pattern.match(src, begin, end);
            if (l == MISMATCH) return MISMATCH;
            if (l > ret) ret = l;
          }
          return ret;
        }
  
        @Override public String toString() {
          StringBuilder sb = new StringBuilder();
          sb.append('(');
          for (Pattern pattern : patterns) {
            sb.append(pattern).append(" & ");
          }
          if (sb.length() > 1) {
            sb.delete(sb.length() - 3, sb.length());
          }
          return sb.append(')').toString();
        }
      };
    }
docs: Returns a {@link Pattern} that matches if all of {@code patterns} matches, in which case, the maximum match length
  is returned. Mismatch if any one mismatches.