Regulärer Ausdruck für die Suche nach einer IP
sirius6b
- php
Hallo,
ich habe eine Ausgabe die ich nach einer IP durchsuchen möchte.
ppp0 Link encap:-Point-Point Protocol
inet addr:84.56.138.25 P-t-P:84.56.128.1 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1492 Metric:1
RX packets:31806 errors:0 dropped:0 overruns:0 frame:0
TX packets:34605 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:9066343 (8.6 MiB) TX bytes:7241126 (6.9 MiB)
jetzt würde ich mit einem RegEX gerne den Wert von "inet addr:" herausbekommen, also die IP. Kann mir einer einen Denkansatz geben?
Ich habe schon ewig nichts mehr mit Regulären Ausdrücken gemacht und weiß nicht wirklich wo ich anfangen soll...
Dankeschön und Gruß,
sirius6b
Hi sirius6b,
jetzt würde ich mit einem RegEX gerne den Wert von "inet addr:" herausbekommen, also die IP. Kann mir einer einen Denkansatz geben?
Die Funktion preg_match() und http://tut.php-q.net/regex.html, falls Verständnissprobleme existieren.
Eine IP sieht Strukturmäßig so aus:
84 . 56 . 138 . 25
1 bis 3 Zahlen, ein Punkt, 1 bis 3 Zahlen, ein Punkt, 1 bis 3 Zahlen, ein Punkt, 1 bis 3 Zahlen
MfG, Dennis.
Hallo Dennis,
Die Funktion preg_match() und http://tut.php-q.net/regex.html, falls Verständnissprobleme existieren.
könnte ich mit diesem Ausdruck Erfolg haben?
preg_match("/inet addr:([0-9]{1,3}(.*)[0-9]{1,3}(.*)[0-9]{1,3}(.*)[0-9]{1,3}/", $eingabe, $matches);
Grüße und Danke schon einmal,
sirius6b
Kleiner Nachtrag...
preg_match("/inet addr:([0-9]{1,3}.*[0-9]{1,3}.*[0-9]{1,3}.*[0-9]{1,3})/", $eingabe, $matches);
bzw. so müsste er eigentlich mehr sinn machen...
Gruß,
sirius6b
Hallo!
preg_match("/inet addr:([0-9]{1,3}.*[0-9]{1,3}.*[0-9]{1,3}.*[0-9]{1,3})/", $eingabe, $matches);
Ich bin absolut kein Experte zu regulären Ausdrücken, aber würde es nicht noch mehr sinn machen, wenn du zwischen den Zahlenblöcken immer nur nach einem Punkt suchst anstatt nach einem x-beliebigem Zeichen, das auch noch x-beliebig oft vorkommen darf?
Also mein Vorschlag wäre
preg_match("/inet addr:([0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3})/", $eingabe, $matches);
Die IP steht dann in $matches[1].
Michael
Hallo Bevan,
Also mein Vorschlag wäre
preg_match("/inet addr:([0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3})/", $eingabe, $matches);
Die IP steht dann in $matches[1].
ja, würde mehr Sinn machen. Wie gesagt, ist ewig her. Ich habe hier auf dem Rechner leider gerade kein PHP installiert. Weiß jemand eine Seite wo ich das testen kann?
Vielen Dank auf jeden Fall schonmal von mir!
Gruß,
sirius6b
Ja, habe das ganze mal bei mir upgeloadet:
http://www.bi-co.net/Bevan/regexp.php
Der Code der Seite lautet einfach nur:
<?php
$text = 'ppp0 Link encap:-Point-Point Protocol
inet addr:84.56.138.25 P-t-P:84.56.128.1 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1492 Metric:1
RX packets:31806 errors:0 dropped:0 overruns:0 frame:0
TX packets:34605 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:9066343 (8.6 MiB) TX bytes:7241126 (6.9 MiB)';
preg_match("/inet addr:([0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3})/", $text, $ip);
print_r ($ip);
?>
Ich weiß, dass die Seite kein valides HTML erzeugt ;-)
Michael
Hallo Bevan,
http://www.bi-co.net/Bevan/regexp.php
Ich danke Dir!
Ich weiß, dass die Seite kein valides HTML erzeugt ;-)
Eine Unverschämtheit! Und das hier in diesem Forum! :-)
Gruß,
sirius6b
Hallo Bevan,
mal interessehalber: könnte ich die wiederholten Teile hier eventuell abkürzen?
preg_match("/inet addr:([0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3})/
vielleicht so oder so ähnlich?
/inet addr:(([0-9]{1,3}.){,3}[0-9]{1,3})/
Gruß,
sirius6b
Hi sirius6b,
preg_match("/inet addr:([0-9]{1,3}.*[0-9]{1,3}.*[0-9]{1,3}.*[0-9]{1,3})/", $eingabe, $matches);
bzw. so müsste er eigentlich mehr sinn machen...
Vorher war nur ein kleiner Fehler mit den Klammern - ( - drin, am RegEx selber hat sich nicht viel geändert.
Ich halte noch mal kurz fest: Der Punkt matched, sofern er nicht innerhalb von eckigen Klammern (also innerhalb einer Zeichneklasse) vorkommt jedes beliebige Zeichen, abgesehen von einem Zeilenumbruch.
Um einen Punkt selber zu fassen, kannst du entweder . schreiben, es würde aber auch [.] funktionieren.
Das Zeichen * steht für ein beliebig häufiges Vorkommen, dazu gehört auch 0 mal. Ebenso gibt es noch +, welches zwar ebenfalls für bis unendlich gilt, aber erst von 1 an. Das Zeichen müsste dann also mindestens einmal vorkommen.
Das [0-9] kannst du außerdem noch kürzer schreiben, indem du \d verwendest. \d steht für Digit und matched eine beliebige Zahl. Alternativ gibt es auch noch \D, was alles außer einer Zahl matched. Weitere solche Kürzel findest du im PHP Manual unter PCRE Pattern Syntas - backslashes bei "The third use of backslash".
MfG, Dennis.