Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi RegEx positive look-behind (https://www.delphipraxis.net/149402-regex-positive-look-behind.html)

geskill 20. Mär 2010 17:56


RegEx positive look-behind
 
Hi,
ich benutze die TRegExpr Klasse von Andrey Sorokin. Nun möchte ich in eine Text alle großen "I" Buchstaben gegen ein kleines "l" ersetzen, aber nur wenn das große "I" nicht am Anfang des Wortes steht. Jedoch bekomme ich eine Fehlermeldung: "TRegExpr(comp): Urecognized Modifier". Kann es sein das diese Klasse kein "positive look-behind" unterstützt?

Delphi-Quellcode:
function SpecialL(AText: string): string;
begin
  result := AText;

  with TRegExpr.Create do
    try
      result := ReplaceRegExpr('(?<=[\S])I', AText, 'l', True);
    finally
      Free;
    end;
end;
Mit diesem Online-Tester klappt es:
RegEx Tester

Alternative könnte man sowas machen, aber vielleicht mache ich ja was an der Systax falsch:
Delphi-Quellcode:
function SpecialL(AText: string): string;
var
  Offset: Integer;
begin
  result := AText;

  Offset := Pos('I', AText);
  while not(Offset = 0) do
  begin
    if (Offset > 1) and (AText[Offset - 1] in ['A' .. 'Z', 'a' .. 'z']) then
      AText[Offset] := 'l';

    Offset := PosEx('I', AText, Offset + 1);
  end;

  result := AText;

end;

Neutral General 6. Apr 2010 12:10

Re: RegEx positive look-behind
 
Habe gerade das gleiche Problem und die gleiche Frage:

Zitat:

Jedoch bekomme ich eine Fehlermeldung: "TRegExpr(comp): Urecognized Modifier". Kann es sein das diese Klasse kein "positive look-behind" unterstützt?
(In meinem Fall ist es ein Lookahead..)

himitsu 6. Apr 2010 12:38

Re: RegEx positive look-behind
 
Notfalls einfach
Delphi-Quellcode:
result := ReplaceRegExpr('\SI', AText, '$1i', True);
Nur wenn der erste Buchstabe in AText ein I wäre, würde es das nicht ersetzen, aber dort wäre es vermutlich eh ein Wortanfang.
Ach ja, II würde so auch nicht vollständig ersetzt.


Zitat:

Urecognized Modifier
Hat aber nichts mit einem Lookarounds zu tun.

Hast du die Delimiter richtig gesetzt und sicher daß du keinen ungültigen/unbekannten Modifier angegeben hast?


(hatte leider noch keine Zeit meine RegEx-Klasse fertigzustellen, aber diese kann sowas ... allerdings nur für D2006+ )


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:50 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz