anchor.diff:         if SourcePosition<=SourceLength then begin
           case Source[SourcePosition] of
            '0'..'9':begin
  -          Value:=CountInternalCaptures;
  -          inc(CountInternalCaptures);
  -          if rfIGNORECASE in Flags then begin
  -           result:=NewNode(ntBACKREFERENCEIGNORECASE,nil,nil,nil,Value);
  -          end else begin
  -           result:=NewNode(ntBACKREFERENCE,nil,nil,nil,Value);
  -          end;
  -          result^.Group:=byte(ansichar(Source[SourcePosition]))-byte(ansichar('0'));
  +          result:=NewBackReferencePerIndex(byte(ansichar(Source[SourcePosition]))-byte(ansichar('0')));
             inc(SourcePosition);
  -          if (result^.Group>=CountCaptures) or (GroupIndexIntegerStack.IndexOf(result^.Group)>=0) then begin
  -           raise EFLRE.Create('Syntax error');
  -          end;
            end;
            'b','y':begin
             result:=NewNode(ntBRK,nil,nil,nil,0);
  
positive.code:             end else begin
               raise EFLRE.Create('Duplicate named group');
              end;
              GroupIndexIntegerStack.Add(Value);
              GroupNameStringStack.Add(Name);
              try
  
negative.code:   except
     FreeAndNil(result);
     raise;
    end;
   end;
   function NewBackReferencePerIndex(const Group:longint):PFLRENode;
   var Value:longint;
   begin
    if (Group>=CountCaptures) or (GroupIndexIntegerStack.IndexOf(Group)>=0) then begin
     raise EFLRE.Create('Syntax error');
    end;
    Value:=CountInternalCaptures;
    inc(CountInternalCaptures);
    if rfIGNORECASE in Flags then begin
     result:=NewNode(ntBACKREFERENCEIGNORECASE,nil,nil,nil,Value);
    end else begin
     result:=NewNode(ntBACKREFERENCE,nil,nil,nil,Value);
    end;
    result^.Group:=Group;
   end;
   function NewBackReferencePerName(const Name:ansistring):PFLRENode;
   var Index,Value:longint;
   begin
    Value:=-1;
    for Index:=1 to length(Name) do begin
     if Name[Index] in ['0'..'9'] then begin
      if Index>1 then begin
       Value:=Value*10;
      end else begin  
       Value:=0;
      end;
      inc(Value,byte(ansichar(Name[Index]))-byte(ansichar('0')));
     end else begin
      Value:=-1;
      break;
     end;
    end;
    if Value>=0 then begin
     result:=NewBackReferencePerIndex(Value);
    end else begin
     if (NamedGroupStringList.IndexOf(Name)<0) or (GroupNameStringStack.IndexOf(Name)>=0) then begin
      raise EFLRE.Create('Syntax error');
     end;
     Value:=CountInternalCaptures;
     inc(CountInternalCaptures);
     if rfIGNORECASE in Flags then begin
      result:=NewNode(ntBACKREFERENCEIGNORECASE,nil,nil,nil,Value);
     end else begin
      result:=NewNode(ntBACKREFERENCE,nil,nil,nil,Value);
     end;
     result^.Group:=-1;
     result^.Name:=Name;
    end;
   end;
   function ParseAtom:PFLRENode;
  