![]() |
IP-Adressen mit RegEx auslesen
Hallo,
ich möchte eine alle IP-Adresse+Port (xxx.xxx.xxx.xxx:xx) aus der Zwischenablage rausfiltern. ich nutze dazu die RegExPr-Kompo, aber mein Code will nicht so richtig funktionieren.
Delphi-Quellcode:
weiß jemand weiter? Ich bekomme keine Ausgabe!
var
RegEx: TRegExpr; begin if Clipboard.HasFormat(CF_Text) then begin RegEx := TRegExpr.Create(); RegEx.Expression := '/([0-9]{1,3}\.){3}[0-9]{1,3}\:[0-9]{1,5}/'; RegEx.InputString := Clipboard.AsText; if RegEx.Exec() then begin repeat memoProtocoll.Lines.Add(RegEx.Match[0] + ' - ' + RegEx.Match[1]); until not RegEx.ExecNext(); end; RegEx.Free(); end; Danke |
Re: IP-Adressen mit RegEx auslesen
Hallo TriphunEM,
ich weiss ja nicht was du da machen willst. Aber schau dir doch mal das an...
Delphi-Quellcode:
MfG
var RegEx: TRegExpr;
begin if Clipboard.HasFormat(CF_Text) then begin RegEx:=TRegExpr.Create; try RegEx.Expression := '([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3})'; if RegEx.Exec(Clipboard.AsText) then begin repeat memoProtocoll.Lines.Append( RegEx.Match[1] + ' - ' + RegEx.Match[2] + ' - ' + RegEx.Match[3] + ' - ' + RegEx.Match[4] ); until not RegEx.ExecNext; end; finally RegEx.Free; end; end; end; Thorsten |
Re: IP-Adressen mit RegEx auslesen
Delphi-Quellcode:
// ...
RegEx := TRegExpr.Create(); RegEx.Expression := '[\d]{1,3}[\.]{1}[\d]{1,3}[\.]{1}[\d]{1,3}[\.]{1}[\d]{1,3}[\:]{1}[\d]{1,5}'; RegEx.InputString := Clipboard.AsText; if RegEx.Exec() then begin repeat Memo1.Lines.Add(RegEx.Match[0]); until not RegEx.ExecNext(); end; RegEx.Free(); end; \d steht für Zahlen aber 0-9 würde auch funktionieren du kannst dich doch vortasten mit den regulären ausdrücken, nimm zuerst nur 3 zahlen zur prüfung und erweitere dann deinen regulären ausdruck bis du beim ergebnios angelangt bist. |
Re: IP-Adressen mit RegEx auslesen
die korrekte regular expression wäre
Delphi-Quellcode:
nachzulesen
/^0*([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])\.0*([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])\.0*([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])\.0*([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])$/
![]() |
Re: IP-Adressen mit RegEx auslesen
Ähm, das ist ja schön und gut, aber so kann das ja kein Mensch lesen... Vor allem steht da ein Code 4 mal da, 3 davon könnte man zusammenfassen.
Ich habe das ganze vor kurzem in PHP mit dem PCRE gelöst, vielleicht bringt dich das weiter:
Code:
Das gleiche könnte man normal auch mit der RegEx von den MSDNlern machen, allerdings finde ich die ausgeschriebenen Zahlen meistens schöner, vor allem, wenn es nicht soo lange RegEx's sind.
#(25[0-5]|(2[0-4]|[01]?[0-9]?)[0-9]\.){3}(25[0-5]|(2[0-4]|[01]?[0-9]?)[0-9])#
|
Re: IP-Adressen mit RegEx auslesen
Da kontere ich und sage
Code:
Musst ja nicht wirklich alle einzelnen Zahlen speichern, oder? Die RegExp sollte dadurch schneller gehn, wenn du sie nachher analysieren willst kannst du sie immer noch an allen Punkten aufspalten, und zwar ohne Regex, geht normalerweise sowieso schneller ;)
#(?:25[0-5]|(?:2[0-4]|[01]?[0-9]?)[0-9]\.){3}(?:25[0-5]|(?:2[0-4]|[01]?[0-9]?)[0-9])#
Greetz alcaeus |
Re: IP-Adressen mit RegEx auslesen
und wenn man dann noch eine Klammer hinzufügt, wird es noch "korrekter":
Code:
btw: Tool zum "Erpröbeln" von RegExp's (basierend auf PCRE):
#(?:[color=#ff003f](?:[/color]25[0-5]|(?:2[0-4]|[01]?[0-9]?)[0-9][color=#ff003f])[/color]\.){3}(?:25[0-5]|(?:2[0-4]|[01]?[0-9]?)[0-9])#
![]() |
Re: IP-Adressen mit RegEx auslesen
Zitat:
*ergänzt* |
Re: IP-Adressen mit RegEx auslesen
Mit "capturing groups":
Code:
... und ohne:
'\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b'
Code:
In beiden Fällen werden 0.0.0.0 .. 255.255.255.255 erkannt. Quelle:
'\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b'
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06: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-2025 by Thomas Breitkreuz