anchor.diff:             FreeAndNil(UnicodeCharClass);
             end;
            end;
  -         'g','k':begin
  +         'g':begin
  +          inc(SourcePosition);
  +          if SourcePosition<=SourceLength then begin
  +           case Source[SourcePosition] of
  +            '-':begin
  +             inc(SourcePosition);
  +             Name:='-';
  +             if (SourcePosition<=SourceLength) and (Source[SourcePosition] in ['0'..'9']) then begin
  +              repeat
  +               Name:=Name+Source[SourcePosition];
  +               inc(SourcePosition);
  +              until (SourcePosition>SourceLength) or not (Source[SourcePosition] in ['0'..'9']);
  +              result:=NewBackReferencePerName(Name);
  +             end else begin
  +              raise EFLRE.Create('Syntax error');
  +             end;   
  +            end;
  +            '0'..'9':begin
  +             Name:='';
  +             while (SourcePosition<=SourceLength) and (Source[SourcePosition] in ['0'..'9']) do begin
  +              Name:=Name+Source[SourcePosition];
  +              inc(SourcePosition);
  +             end;
  +             result:=NewBackReferencePerName(Name);
  +            end;
  +            '{','''','<':begin
  +             case Source[SourcePosition] of
  +              '{':begin
  +               TerminateChar:='}';
  +              end;
  +              '<':begin
  +               TerminateChar:='>';
  +              end;
  +              else begin
  +               TerminateChar:='''';
  +              end;
  +             end;
  +             inc(SourcePosition);
  +             Name:='';
  +             while (SourcePosition<=SourceLength) and (Source[SourcePosition] in ['0'..'9','A'..'Z','a'..'z','_','-']) do begin
  +              Name:=Name+Source[SourcePosition];
  +              inc(SourcePosition);
  +             end;
  +             if (SourcePosition<=SourceLength) and (Source[SourcePosition]=TerminateChar) then begin
  +              inc(SourcePosition);
  +              result:=NewBackReferencePerName(Name);
  +             end else begin
  +              raise EFLRE.Create('Syntax error');
  +             end;
  +            end;
  +            else begin
  +             raise EFLRE.Create('Syntax error');
  +            end;
  +           end;
  +          end else begin
  +           raise EFLRE.Create('Syntax error');
  +          end;
  +         end;
  +         'k':begin
             inc(SourcePosition);
             if (SourcePosition<=SourceLength) and (Source[SourcePosition] in ['{','''','<']) then begin
              case Source[SourcePosition] of
  
positive.code:            end;
             inc(SourcePosition);
             Name:='';
             while (SourcePosition<=SourceLength) and (Source[SourcePosition] in ['0'..'9','A'..'Z','a'..'z','_']) do begin
              Name:=Name+Source[SourcePosition];
              inc(SourcePosition);
             end;
  
negative.code:              '=':begin
                inc(SourcePosition);
                Name:='';
                while (SourcePosition<=SourceLength) and (Source[SourcePosition] in ['0'..'9','A'..'Z','a'..'z','_','-']) do begin
                 Name:=Name+Source[SourcePosition];
                 inc(SourcePosition);
                end;
  