anchor.diff:  
     if (MatchCondition<>sfImpossible) and
        (((Condition and sfMatchWins)<>0) or ((NextMatchCondition and sfEmptyAllFlags)<>0)) and
  -     (((MatchCondition and sfEmptyAllFlags)=0) or Satisfy(MatchCondition)) then begin
  +     (((MatchCondition and sfEmptyAllFlags)=0) or
  +      (((MatchCondition and sfEmptyAllFlags) and not GetSatisfyFlags(CurrentPosition))=0)) then begin
      for Counter:=0 to CountSubMatches-1 do begin
       OnePassNFAMatchSubMatches[Counter]:=OnePassNFAWorkSubMatches[Counter];
      end;
  
positive.code:      Argument,i,LastPosition:longint;
       CurrentChar,LocalFlags:longword;
       InputIsUTF8:boolean;
    function Satisfy(const NextFlags:longword;const Position:longint):boolean;
    begin
     result:=((NextFlags and sfEmptyAllFlags) and not GetSatisfyFlags(Position))=0;
    end;
   begin
    result:=false;
  
  
negative.code:       continue;
       end;
       opZEROWIDTH:begin
        if ((longword(Instruction^.Value) and sfEmptyAllFlags) and not GetSatisfyFlags(Position))=0 then begin
         Instruction:=Instruction^.Next;
         continue;
        end else begin
  