anchor.diff:             end else begin
               raise EFLRE.Create('Syntax error');
              end;
  -           Value:=CountInternalCaptures;
  -           inc(CountInternalCaptures);
  -           if (CountCaptures+1)>length(CapturesToSubMatchesMap) then begin
  -            SetLength(CapturesToSubMatchesMap,(CountCaptures+1)*2);
  -           end;
  -           CapturesToSubMatchesMap[CountCaptures]:=Value;
  -           inc(CountCaptures);
  -           NamedGroupStringIntegerPairHashMap.Add(Name,Value);
  -           if NamedGroupStringList.IndexOf(Name)<0 then begin
  -            NamedGroupStringList.Add(Name);
  -           end else begin
  -            raise EFLRE.Create('Duplicate named group');
  -           end;
  -           NamedGroupStringIntegerPairHashMap.Add(IntToStr(Value),Value);
  -           if NamedGroupStringList.IndexOf(IntToStr(Value))<0 then begin
  -            NamedGroupStringList.Add(IntToStr(Value));
  -           end else begin
  -            raise EFLRE.Create('Duplicate named group');
  -           end;
  -           GroupIndexIntegerStack.Add(Value);
  -           GroupNameStringStack.Add(Name);
  -           try
  -            result:=NewNode(ntPAREN,ParseDisjunction,nil,nil,Value);
  -           finally
  -            GroupIndexIntegerStack.Delete(GroupIndexIntegerStack.Count-1);
  -            GroupNameStringStack.Delete(GroupNameStringStack.Count-1);
  -           end;
  +           result:=NewNamedGroup(Name);
             end;
             '!','=':begin
              Negate:=Source[SourcePosition]='!';
  
positive.code:         if rfNAMED in Flags then begin
           result:=ParseDisjunction;
          end else begin
           Value:=CountInternalCaptures;
           inc(CountInternalCaptures);
           if (CountCaptures+1)>length(CapturesToSubMatchesMap) then begin
            SetLength(CapturesToSubMatchesMap,(CountCaptures+1)*2);
           end;
           CapturesToSubMatchesMap[CountCaptures]:=Value;
           inc(CountCaptures);
           NamedGroupStringIntegerPairHashMap.Add(IntToStr(Value),Value);
           if NamedGroupStringList.IndexOf(IntToStr(Value))<0 then begin
            NamedGroupStringList.Add(IntToStr(Value));
           end else begin
            raise EFLRE.Create('Duplicate named group');
           end;
           GroupIndexIntegerStack.Add(Value);
           try
            result:=NewNode(ntPAREN,ParseDisjunction,nil,nil,Value);
           finally
            GroupIndexIntegerStack.Delete(GroupIndexIntegerStack.Count-1);
           end;
          end;
         end;
         if (SourcePosition<=SourceLength) and (Source[SourcePosition]=')') then begin
  
negative.code:    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')));
  