PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : perl regex



blackm
18-10-2002, 15:22
Hi,

ich versuche aus ifconfig ppp0 meine Internet IP auszulesen. Die Ausgabe des Befehl speicher ich in @out. Die IP versuche ich per
$out[1] =~ /^.*:([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}).*$/;
$ip = $1;zu ermitteln. Die Zeile die durchsucht wird sieht so aus: inet Adresse:212.202.200.8 P-z-P:212.202.223.251 Maske:255.255.255.255. In $1 wird mir un die Netmask gespeichert. Kann mir jemand sagen was ich verändern muß, damit der regex auf die erste IP matcht und diese dann in $1 speichert wird?
Mit $out[1] =~ /^.*se:([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}).*$/; funktioniert es, aber mit der oberen Variante muß es doch auch irgendwie gehen, wenn ich ihm sage, er soll das erste Ergebnis nehemn. das er findet.

by, blackm

Pingu
18-10-2002, 15:48
Hi,


Original geschrieben von blackm


$out[1] =~ /^.*:([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}).*$/;
$ip = $1;zu ermitteln. Die Zeile die durchsucht wird sieht so aus: inet Adresse:212.202.200.8 P-z-P:212.202.223.251 Maske:255.255.255.255.

Also mit
^.*:würde ich nicht anfangen, denn '.' heißt ja jedes beliebige Zeichen und Perl aht den Ansatz immer das maximalste zu finden. In Deinem Fall wäre das maximalste bis zum letzten ':'. Daher entweder sagen auf minimal
^.*?:oder es soll halt alles außer ':' sein
^[^:]*:

Gruß

-= Pingu =-

blackm
18-10-2002, 16:01
Hi,


Original geschrieben von Pingu
Hi,

Perl hat den Ansatz immer das maximalste zu finden.Ah, gut zu wissen! Danke für die beiden Beispiele, mein gewünschtes Ziel wird nun erreicht.

by, blackm