preg_match_all findet 0 nicht
Robert Hennig
- php
Hallo Leute,
ich habe eine Zeile die eine IP-Adresse enthält mit angehängter Port-Nummer.
192.168.0.4:300
Mit dem folgenden finde ich auch korrekt die IP-Adresse
preg_match_all("|(([0-9]{1,3}).{1}([0-9]{1,3}).{1}([0-9]{1,3}).{1}([0-9]{1,3}):([0-9]{1,4}))|U",$line,$regs)
Allerdings findet er beim Port nur noch die Zahl 3 und nicht 300 woran kann das liegen? Der Suchstring sieht an der Stelle doch auch nicht anderst aus als bei der IP-Adresse....
Liebe Grüße
Robert
Hallo,
ich habe eine Zeile die eine IP-Adresse enthält mit angehängter Port-Nummer.
192.168.0.4:300
Mit dem folgenden finde ich auch korrekt die IP-Adresse
preg_match_all("|(([0-9]{1,3}).{1}([0-9]{1,3}).{1}([0-9]{1,3}).{1}([0-9]{1,3}):([0-9]{1,4}))|U",$line,$regs)
Zwar habe ich in der oku von preg_match_all auch die | am Anfang und Ende der Pattern gefunden, aber keine Erklärung dafür. Hast Du eine Erklärung, was die ODER-Verknüpfungen dort sollen? Ich würde es so versuchen:
$line = "192.168.0.4:300";
preg_match_all("/(([0-9]{1,3}).{1}([0-9]{1,3}).{1}([0-9]{1,3}).{1}([0-9]{1,3}):([0-9]{1,4}))/",$line,$regs);
Dann sollte sein:
$regs[0][0] = 192.168.0.4:300
und
$regs[1][0] = 192.168.0.4:300
$regs[1][1] = 192
$regs[1][2] = 168
$regs[1][3] = 0
$regs[1][4] = 4
$regs[1][5] = 300
Ich kanns zur Zeit, mangels PHP, nicht testen.
viele Grüße
Axel
Hallo Robert, Hallo Axel,
preg_match_all("|(([0-9]{1,3}).{1}([0-9]{1,3}).{1}([0-9]{1,3}).{1}([0-9]{1,3}):([0-9]{1,4}))|U",$line,$regs)
lass mal das 'U' weg, dann funktioniert es (mit dem U wird der ganze Ausdruck "ungierig" und holt sich so wenig Zeichen wie möglich).
Zwar habe ich in der oku von preg_match_all auch die | am Anfang und Ende der Pattern gefunden, aber keine Erklärung dafür.
du kannst als Begrenzungszeichen jedes beliebige Zeichen (außer alphanumerischen und dem Backslash) verwenden - also auch ein | (ob das natürlich Sinnvoll ist, sei dahingestellt :-))
preg_match_all("/(([0-9]{1,3}).{1}([0-9]{1,3}).{1}([0-9]{1,3}).{1}([0-9]{1,3}):([0-9]{1,4}))/",$line,$regs);
Dann sollte sein:
[...]
das kommt auch raus - was aber nicht an den Begrenzungszeichen sondern an dem U lag.
Grüße aus Nürnberg
Tobias