in reply to Re^2: Extracting IP address from large text file.
in thread Extracting IP address from large text file.

Sorry i did miss the +9 but still getting an error

# ATTEMPT 1 (works but will need to split file into words and test ea +ch word) my $str = "br>94.198.240.132:60988 asdfasdf 174.142.24.201:3128 asdfas +dfasdf"; ($p1, $p2, $p3 , $p4 , $p5) = ($str =~ /([0-9]{1,3}).([0-9]{1,3}).([0- +9]{1,3}).([0-9]{1,3}):([0-9]{1,5})/g); print "$p1 $p2 $p3 $p4 $p5 \n"; # ATTEMPT 2 (still getting an error message) 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};
Missing right curly or square bracket at C:\CC\BUY\ptest2.pl line 16, at end of line syntax error at C:\CC\BUY\ptest2.pl line 16, at EOF Execution of C:\CC\BUY\ptest2.pl aborted due to compilation errors.

Thank you again for all your help AnomalousMonk and Moritz

Replies are listed 'Best First'.
Re^4: Extracting IP address from large text file.
by AnomalousMonk (Archbishop) on Oct 20, 2010 at 12:01 UTC

    In 'ATTEMPT 2', I think you are missing the closing } (right-curly-bracket) of the  if block (should be just after the  print statement). With this closing curly, the code works for me – see first example below. BWT: Use the  [download] link to download whatever is posted within  <code> ... </code> or  <c> ... </c> tags without inclusion of line-wrap flags!

    As for extracting individual digit fields from each extracted IP address, I think a two-step process would be best: see second example below.

    In general, see perlre, perlrequick, perlreref, perlretut,

    >perl -wMstrict -le "my $str = 'foo 94.198.240.132:60988 bar 174.142.24.201:3128 baz'; 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}; } ;; if (my @ips = $str =~ m{ \d{1,3} (?: \. \d{1,3}){3} : \d{1,5} }xmsg) +{ for my $ip (@ips) { my ($p1, $p2, $p3, $p4, $p5) = $ip =~ m{ \d+ }xmsg; print qq{'$ip': '$p1' '$p2' '$p3' '$p4' '$p5'} } } " matched 94.198.240.132:60988 174.142.24.201:3128 '94.198.240.132:60988': '94' '198' '240' '132' '60988' '174.142.24.201:3128': '174' '142' '24' '201' '3128'