Monkomatic has asked for the wisdom of the Perl Monks concerning the following question:
Oddly i cannot find a simple answer to this rather important question anywhere on the web.
I am trying to extract ip address and port from multiple occurrences in a file.
if ($_ =~ /[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}:[0-9]{1,5}:/ +) {print MYFILE2 "$_ \n";}
Will find it and print it if the line contains it.
BUT.. How do i match it and assign the IP address to a variable even if the string contains multiple addresses?
I had though i could split the file into words and then for each word compare but there has to be a better way.
Thanks in advance
monkomatic
Thank you for your quick reply MORITZ but what am i comparing and where do i assign the data?
if ($_ =~ /[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}:[0-9]{1,5}:/ +) {print MYFILE2 "$_ \n";}
becomes
while <$_> { while ([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}:[0-9]{1,5}/g) + { @iparray[$iparraycounter] = $1; $iparraycounter++; }}
@iparray now contains just the ip addresses?
$_= is the entire page with addresses
@iparray = list of addresses found
THANK YOU AnomalousMonk (P.s. I like the name :)
Your example is easy to follow and almost understood ... :)
I am abit confused as to where to insert the regex however.
p.s. Yup i am aware it will do 999. It will get kicked out later though. when i do a verify site is up.
I did try adding the following code but got an error:
my $str = "br>94.198.240.132:60988 asdfasdf 174.142.24.201:3128 asdfas +dfasdf"; if (my @matches = $str =~ m{ ([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0- +9]{1,3}:[0-9]{1,5}) }xmsg) { print qq{matched @matches}; }
Invalid [] range "0-" in regex; marked by <-- HERE in m/ ([0-9]{1,3}\. +[0-9]{1,3}\.[0-9]{1,3}\.[0-<-- HERE +9]{1,3}:[0-9]{1,5}) / at C:\CC\BUY\ptest.pl line 43.
I Tried removing the enclosing ()
= same error$str =~ m{ [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0- +9]{1,3}:[0-9]{1,5} }xmsg)
I Tried adding / /
= same error$str =~ m{ /[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0- +9]{1,3}:[0-9]{1,5}/ }xmsg)
Sorry will add a new message next time
|
|---|