Hi,
ich beschäftige im Moment mit den Regular Expressions unter Lazarus.
https://wiki.freepascal.org/Regexpr
https://regex.sorokin.engineer/en/lates ... sions.html
Leider bin ich da nicht so fit und brauche einen Tritt in die richtige Richtung. Ich möchte einen String aus Zahlen und Buchstaben von einander Trennen.
Zum Beispiel soll aus 320px -> Wert1 => 320, Wert2 => px werden.
Unter PHP gibt es zum Beispiel preg_split, https://www.php.net/manual/de/function.preg-split.php. Bei Lazarus finde ich nichts wirklich.
Kann mir jemand helfen?
Vielen Dank im Vorraus
Regexpr
-
- Lazarusforum e. V.
- Beiträge: 3177
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: Regexpr
Du musst immer ein TRegExpr-Objekt erstellen (Beispiele siehe Wiki) und kannst darüber die gefundenen Elemente finden. Wenn du einfach eine Liste haben willst, ist die Methode TRegExpr.Split dein Freund. Über die Eigenschaft Match[] kannst du die Subexpressions auch direkt abfragen.
Reguläre Ausdrücke probiere ich überwiegend online per regex101.com, da die Auswertung echt gut visualisiert wird.
Reguläre Ausdrücke probiere ich überwiegend online per regex101.com, da die Auswertung echt gut visualisiert wird.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- Beiträge: 582
- Registriert: Sa 22. Okt 2016, 23:12
- OS, Lazarus, FPC: W10, L 3.8
- CPU-Target: 32+64bit
- Wohnort: Dresden
Re: Regexpr
So zum Beispiel:
Code: Alles auswählen
...
uses RegExpr
...
procedure TForm1.Button1Click(Sender: TObject);
var
re: TRegExpr;
i: Integer;
ReOut: String;
begin
Memo1.Clear;
if (Edit1.Text = '') or (Edit2.Text = '') then begin
Memo1.Lines.Add('Error: String or Expression emtpy');
Exit;
end;
ReOut := 'Group %d. -> Pos:%d, Len:%d -> %s';
re := TRegExpr.Create;
try
try
re.Expression := '(\d*)(\S*)';
//re.Expression := Edit2.Text;
if re.Exec('320px') then begin
//if re.Exec(Edit1.Text) then begin
// Full Match at 0 (Zero)
Memo1.Lines.Add( Format(ReOut, [0, re.MatchPos[0], re.MatchLen[0], re.Match[0]]) );
// Sub Matches
for i:=1 to re.SubExprMatchCount do begin
Memo1.Lines.Add( Format(ReOut, [i, re.MatchPos[i], re.MatchLen[i], re.Match[i]]) );
end;
end;
except
On E:Exception do begin
Memo1.Lines.Add(E.Message);
end;
end;
finally
re.Free;
end;
end;
LG Maik
Windows 10,
- Lazarus 3.8 (stable) + fpc 3.2.2 (stable)
- Lazarus 4.99 (trunk) + fpc 3.3.1 (main/trunk)
Windows 10,
- Lazarus 3.8 (stable) + fpc 3.2.2 (stable)
- Lazarus 4.99 (trunk) + fpc 3.3.1 (main/trunk)
Re: Regexpr
Hi,
danke euch beiden! Habe es mit eurer Hilfe lösen können
mfg
danke euch beiden! Habe es mit eurer Hilfe lösen können

mfg