![]() |
TRegEx.Matches verhält sich anders als gedacht
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo!
Ich habe einen String
Delphi-Quellcode:
(3 Tage, 12 Stunden), der eine Zeitspanne repräsentiert. Ich möchte mit TRegEx.Matches prüfen, ob der String das korrekte Format hat und gleichzeitig die beiden numerischen Teile extrahieren. Die Expression
'3d 12h'
Delphi-Quellcode:
sollte eigentlich genau das tun laut Testtool (Bild 1). Mit dem folgenden Code kommt in Delphi aber was anderes heraus:
'^([0-9]{1,})d ([0-9]{1,2})h$'
Delphi-Quellcode:
Zwar matcht die Expression wie gedacht und bringt auch drei Groups, jedoch enthalten alle drei Groups den identischen String
procedure TForm1.Button1Click(Sender: TObject);
const X = '3d 12h'; var Matches: TMatchCollection; begin Matches := TRegEx.Matches(X, '^([0-9]{1,})d ([0-9]{1,2})h$'); end;
Delphi-Quellcode:
(siehe Bild 2). Wo ist da jetzt der Denkfehler?
'3d 12h'
Grüße Cody |
AW: TRegEx.Matches verhält sich anders als gedacht
Ich habe jetzt nicht in die Implementierung geschaut, aber zu dem Match gehört mehr als ein Verweis auf den String: Die beiden Zahlen davor sind wahrscheinlich die "von" und "bis"-Position in diesem String - Und die sehen für mich richtig aus.
Schau dir doch nicht die rohen Daten im Speicher an, sondern lass den Debugger
Delphi-Quellcode:
und
Matches.Groups[1]
Delphi-Quellcode:
ausgeben.
[2]
|
AW: TRegEx.Matches verhält sich anders als gedacht
Stimmt, du hast recht. Der Denkfehler war, dass TRegEx.Matches den Inputstring gleich zerlegt und im Speicher ablegt. Aber das passiert erst wenn man durchiteriert:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
const X = '3d 12h'; var Matches: TMatchCollection; Match: TMatch; Group: TGroup; V: string; begin Matches := TRegEx.Matches(X, '^([0-9]{1,})d ([0-9]{1,})h$'); for Match in Matches do begin for Group in Match.Groups do begin V := Group.Value; // 1. Durchlauf = '3d 12h' 2. Durchlauf = '3' 3. Durchlauf = '12' end; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:13 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-2025 by Thomas Breitkreuz