anchor.diff:         Instructions[i1].OtherNext:=pointer(ptrint(CountInstructions));
         end;
        end;
  -     ntEXACT:begin
  -      if (Node^.MinCount=0) and (Node^.MaxCount=0) then begin
  -       // nothing
  -      end else if (Node^.MinCount=0) and (Node^.MaxCount=1) then begin
  -       i0:=NewInstruction(opSPLIT);
  -       Instructions[i0].Value:=skQUEST;
  -       if Node^.Value<>0 then begin
  -        // Non-greedy
  -        Instructions[i0].OtherNext:=pointer(ptrint(CountInstructions));
  -        Emit(Node^.Left);
  -        Instructions[i0].Next:=pointer(ptrint(CountInstructions));
  -       end else begin
  -        // Greedy
  -        Instructions[i0].Next:=pointer(ptrint(CountInstructions));
  -        Emit(Node^.Left);
  -        Instructions[i0].OtherNext:=pointer(ptrint(CountInstructions));
  -       end;
  -      end else if Node^.MaxCount<0 then begin
  -       if Node^.MinCount>0 then begin
  -        // Infinity with minimum connt
  -        for Counter:=1 to Node^.MinCount-1 do begin
  -         Emit(Node^.Left);
  -        end;
  -        i0:=CountInstructions;
  -        Emit(Node^.Left);
  -        i1:=NewInstruction(opSPLIT);
  -        Instructions[i1].Value:=skPLUS;
  -        if Node^.Value<>0 then begin
  -         // Non-greedy
  -         Instructions[i1].OtherNext:=pointer(ptrint(i0));
  -         Instructions[i1].Next:=pointer(ptrint(CountInstructions));
  -        end else begin
  -         // Greedy
  -         Instructions[i1].Next:=pointer(ptrint(i0));
  -         Instructions[i1].OtherNext:=pointer(ptrint(CountInstructions));
  -        end;
  -       end else begin
  -        // Infinity without minimum connt
  -        i0:=NewInstruction(opSPLIT);
  -        Instructions[i0].Value:=skSTAR;
  -        if Node^.Value<>0 then begin
  -         // Non-greedy
  -         Instructions[i0].OtherNext:=pointer(ptrint(CountInstructions));
  -{$ifndef UseOpcodeJMP}
  -         FromIndex:=CountInstructions;
  -{$endif}
  -         Emit(Node^.Left);
  -{$ifndef UseOpcodeJMP}
  -         ToIndex:=CountInstructions-1;
  -         OutIndex:=CountInstructions;
  -{$endif}
  -{$ifdef UseOpcodeJMP}
  -         i1:=NewInstruction(opJMP);
  -         Instructions[i1].Next:=pointer(ptrint(i0));
  -{$endif}
  -         Instructions[i0].Next:=pointer(ptrint(CountInstructions));
  -{$ifndef UseOpcodeJMP}
  -         for Index:=FromIndex to ToIndex do begin
  -          if ptrint(Instructions[Index].Next)=OutIndex then begin
  -           Instructions[Index].Next:=pointer(ptrint(i0));
  -          end;
  -          if ptrint(Instructions[Index].OtherNext)=OutIndex then begin
  -           Instructions[Index].OtherNext:=pointer(ptrint(i0));
  -          end;
  -         end;
  -{$endif}
  -        end else begin
  -         // Greedy
  -         Instructions[i0].Next:=pointer(ptrint(CountInstructions));
  -{$ifndef UseOpcodeJMP}
  -         FromIndex:=CountInstructions;
  -{$endif}
  -         Emit(Node^.Left);
  -{$ifndef UseOpcodeJMP}
  -         ToIndex:=CountInstructions-1;
  -         OutIndex:=CountInstructions;
  -{$endif}
  -{$ifdef UseOpcodeJMP}
  -         i1:=NewInstruction(opJMP);
  -         Instructions[i1].Next:=pointer(ptrint(i0));
  -{$endif}
  -         Instructions[i0].OtherNext:=pointer(ptrint(CountInstructions));
  -{$ifndef UseOpcodeJMP}
  -         for Index:=FromIndex to ToIndex do begin
  -          if ptrint(Instructions[Index].Next)=OutIndex then begin
  -           Instructions[Index].Next:=pointer(ptrint(i0));
  -          end;
  -          if ptrint(Instructions[Index].OtherNext)=OutIndex then begin
  -           Instructions[Index].OtherNext:=pointer(ptrint(i0));
  -          end;
  -         end;
  -{$endif}
  -        end;
  -       end;
  -      end else begin
  -       for Counter:=1 to Node^.MinCount do begin
  -        Emit(Node^.Left);
  -       end;
  -       if Node^.MinCount<Node^.MaxCount then begin
  -        if (Node^.MaxCount-Node^.MinCount)<1024 then begin
  -         SetLength(Last,Node^.MaxCount-Node^.MinCount);
  -         try
  -          for Counter:=Node^.MinCount to Node^.MaxCount-1 do begin
  -           i0:=NewInstruction(opSPLIT);
  -           Instructions[i0].Value:=skQUEST;
  -           Last[Counter-Node^.MinCount]:=i0;
  -           if Node^.Value<>0 then begin
  -            // Non-greedy
  -            Instructions[i0].OtherNext:=pointer(ptrint(CountInstructions));
  -           end else begin
  -            // Greedy
  -            Instructions[i0].Next:=pointer(ptrint(CountInstructions));
  -           end;
  -           Emit(Node^.Left);
  -          end;
  -          for Counter:=Node^.MaxCount-1 downto Node^.MinCount do begin
  -           i0:=Last[Counter-Node^.MinCount];
  -           if Node^.Value<>0 then begin
  -            // Non-greedy
  -            Instructions[i0].Next:=pointer(ptrint(CountInstructions));
  -           end else begin
  -            // Greedy
  -            Instructions[i0].OtherNext:=pointer(ptrint(CountInstructions));
  -           end;
  -          end;
  -         finally
  -          SetLength(Last,0);
  -         end;
  -        end else begin
  -         for Counter:=Node^.MinCount to Node^.MaxCount-1 do begin
  -          i0:=NewInstruction(opSPLIT);
  -          Instructions[i0].Value:=skQUEST;
  -          if Node^.Value<>0 then begin
  -           // Non-greedy
  -           Instructions[i0].OtherNext:=pointer(ptrint(CountInstructions));
  -           Emit(Node^.Left);
  -           Instructions[i0].Next:=pointer(ptrint(CountInstructions));
  -          end else begin
  -           // Greedy
  -           Instructions[i0].Next:=pointer(ptrint(CountInstructions));
  -           Emit(Node^.Left);
  -           Instructions[i0].OtherNext:=pointer(ptrint(CountInstructions));
  -          end;
  -         end;
  -        end;
  -       end;
  -      end;
  -     end;
        ntMULTIMATCH:begin
         Emit(Node^.Left);
         if not assigned(BackreferenceParentNode) then begin
  
positive.code:      result.Operation:=FLREpfnoANY;
       result.Exact:=false;
      end;
      ntQUEST,ntSTAR,ntEXACT,ntZEROWIDTH,ntLOOKBEHINDNEGATIVE,ntLOOKBEHINDPOSITIVE,ntLOOKAHEADNEGATIVE,ntLOOKAHEADPOSITIVE,ntBACKREFERENCE,ntBACKREFERENCEIGNORECASE:begin
       result:=TFLREPrefilterNode.Create;
       result.Operation:=FLREpfnoANY;
       result.Exact:=false;
  
negative.code:     end;
      ntQUEST:begin
       if assigned(Node^.Left) then begin
        if Node^.Left^.NodeType in [ntALT,ntCAT,ntQUEST,ntSTAR,ntPLUS] then begin
         result:=result+'(?:'+ProcessNode(Node^.Left)+')';
        end else begin
         result:=result+ProcessNode(Node^.Left);
  