code: private Matcher reset(String input, int start, int end) {
          if (input == null) {
              throw new IllegalArgumentException("input == null");
          }
  
          if (start < 0 || end < 0 || start > input.length() || end > input.length() || start > end) {
              throw new IndexOutOfBoundsException();
          }
  
          this.input = input;
          this.inputChars = input.toCharArray();
          this.regionStart = start;
          this.regionEnd = end;
          resetForInput();
  
          matchFound = false;
          appendPos = 0;
  
          return this;
      }
docs: Resets the Matcher. A new input sequence and a new region can be
  specified. Results of a previous find get lost. The next attempt to find
  an occurrence of the Pattern in the string will start at the beginning of
  the region. This is the internal version of reset() to which the several
  public versions delegate.
  
  @param input
  the input sequence.
  @param start
  the start of the region.
  @param end
  the end of the region.
  
  @return the matcher itself.