anchor.diff:    State:=WorkQueueToCachedState(WorkQueues[0],Flags);
     StartState^:=State;
    end;
  - for Position:=StartPosition downto UntilIncludingPosition-1 do begin
  +
  + for Position:=StartPosition downto UntilIncludingPosition-1 do begin //-1 because match can be delayed of one byte
     LastState:=State;
     if Position>=0 then begin
      CurrentChar:=byte(ansichar(LocalInput[Position]));
  
positive.code:   StartInstruction:=Instance.AnchoredStartInstruction;
    inc(Start,sskAnchored);
   end;
   StartState:=@StartStates[Start];
   if assigned(StartState^) then begin
    State:=StartState^;
  
negative.code:     Flags,PreviousChar,CurrentChar:longword;
  begin
   result:=DFAFail;
  
   LocalInput:=ThreadLocalStorageInstance.Input;
   LocalInputLength:=ThreadLocalStorageInstance.InputLength;
  
   begin
    if (StartPosition>=0) and (StartPosition<=ThreadLocalStorageInstance.InputLength) then begin
     if rfUTF8 in Instance.Flags then begin
  