Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

AW: TPerlRegEx - Performance

  Alt 19. Jun 2012, 14:11
Keine Ahnung, aber das UTF-8 solltest du in den Options dennoch unbedingt setzen.

Isses so schneller? (siehe [edit/add])
Delphi-Quellcode:
type
  TPerlRegEx2 = class(TPerlRegEx)
  private class var
    FTables: AnsiString;
  public
    constructor Create;
  end;

constructor TPerlRegEx2.Create;
begin
  if FTables = 'then
    FTables := pcre_maketables;
  FState := [preNotEmpty];
  FCharTable := PAnsiChar(FTables);
  FPCREOptions := PCRE_UTF8 or PCRE_NEWLINE_ANY;
end;
Ansonsten wenigsten so:
Delphi-Quellcode:
constructor TPerlRegEx2.Create;
begin
  State := [preNotEmpty];
  Options := [preCaseLess]; // einmal umschreiben, da sonst Änderung nicht übernommen wird
  Options := [];
end;
[edit]
Mist, immer diese privaten Property, wo keiner mehr ran kommt. (warte mal ein Sekündchen)


[add]
Delphi-Quellcode:
// erweiterte RTTI darf nicht deaktivert sein

uses
  RegularExpressionsAPI, RegularExpressionsCore, RTTI;

type
  TPerlRegEx2 = class(TPerlRegEx)
  private class var
    FTables: PAnsiChar;
  public
    class constructor Create;
    class destructor Destroy;
    constructor Create;
  end;

class constructor TPerlRegEx2.Create;
begin
  FTables := pcre_maketables;
end;

class destructor TPerlRegEx2.Destroy;
begin
  pcre_dispose(nil, nil, FTables);
end;

constructor TPerlRegEx2.Create;
begin
  State := [preNotEmpty];
  with TRttiContext.Create.GetType(TPerlRegEx2) do begin
    GetField('FCharTable').SetValue(Self, TValue.From<PAnsiChar>(FTables));
    GetField('FPCREOptions').SetValue(Self, Integer(PCRE_UTF8 or PCRE_NEWLINE_ANY));
  end;
end;
$2B or not $2B

Geändert von himitsu (19. Jun 2012 um 14:33 Uhr)
  Mit Zitat antworten Zitat