Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi IP-Adressen mit RegEx auslesen (https://www.delphipraxis.net/71701-ip-adressen-mit-regex-auslesen.html)

TriphunEM 19. Jun 2006 18:51


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:
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;
weiß jemand weiter? Ich bekomme keine Ausgabe!

Danke

omata 19. Jun 2006 19:04

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:
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;
MfG
Thorsten

semo 19. Jun 2006 19:40

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.

Meflin 19. Jun 2006 19:44

Re: IP-Adressen mit RegEx auslesen
 
die korrekte regular expression wäre
Delphi-Quellcode:
/^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])$/
nachzulesen hier ;)


S2B 19. Jun 2006 20:00

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:
#(25[0-5]|(2[0-4]|[01]?[0-9]?)[0-9]\.){3}(25[0-5]|(2[0-4]|[01]?[0-9]?)[0-9])#
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.

alcaeus 19. Jun 2006 20:40

Re: IP-Adressen mit RegEx auslesen
 
Da kontere ich und sage
Code:
#(?:25[0-5]|(?:2[0-4]|[01]?[0-9]?)[0-9]\.){3}(?:25[0-5]|(?:2[0-4]|[01]?[0-9]?)[0-9])#
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 ;)

Greetz
alcaeus

Basilikum 19. Jun 2006 20:55

Re: IP-Adressen mit RegEx auslesen
 
und wenn man dann noch eine Klammer hinzufügt, wird es noch "korrekter":
Code:
#(?:[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])#
btw: Tool zum "Erpröbeln" von RegExp's (basierend auf PCRE): ftp://ftp.bits-n.net/Tools/clueware/RegExTest.exe

S2B 19. Jun 2006 21:48

Re: IP-Adressen mit RegEx auslesen
 
Zitat:

Zitat von alcaeus
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 ;)

Jep, hast du absolut recht, aber auf jeden Fall war meine RegEx übersichtlicher. :P

*ergänzt*

Olli 19. Jun 2006 22:01

Re: IP-Adressen mit RegEx auslesen
 
Mit "capturing groups":

Code:
'\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'
... und ohne:
Code:
'\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'
In beiden Fällen werden 0.0.0.0 .. 255.255.255.255 erkannt. Quelle: RegexBuddy (Tool zum Erstellen und Testen von RegExes in verschiedenen Geschmacksrichtungen, ist seinen - hohen - Preis wert).


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:04 Uhr.

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