}
    boolean match(CharIndexed input, REMatch mymatch) {    if (negative && (input.charAt(mymatch.index) == CharIndexed.OUT_OF_BOUNDS))       return false;    REMatch newMatch = null;    REMatch last = null;    REToken tk;    boolean isMatch;    for (int i=0; i < options.size(); i++) {	tk = (REToken) options.elementAt(i);	REMatch tryMatch = (REMatch) mymatch.clone();	if (tk.match(input, tryMatch)) { // match was successful	    if (negative) return false;	    if (next(input, tryMatch)) {		// Add tryMatch to list of possibilities.		if (last == null) {		    newMatch = tryMatch;		    last = tryMatch;		} else {		    last.next = tryMatch;		    last = tryMatch;		}	    } // next succeeds	} // is a match    } // try next option    if (newMatch != null) {	if (negative) {	    return false;	} else {	    // set contents of mymatch equal to newMatch	    // try each one that matched	    mymatch.assignFrom(newMatch);	    return true;	}    } else {	if (negative) {	    ++mymatch.index;	    return next(input, mymatch);	} else {	    return false;	}    }    // index+1 works for [^abc] lists, not for generic lookahead (--> index)  }