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

The little red plus sign (note that it is, indeed, red in the reply above) at the beginning of  +9{1,3}: is a line-wrap flag and is not intended to be included in the regex. The proper way to write this piece of the regex would be  [0-9]{1,3} or better yet  \d{1,3}

Also: Please, Please, Puh-leeeeze use code tags. Please see Markup in the Monastery.

Replies are listed 'Best First'.
Re^3: Extracting IP address from large text file.
by Monkomatic (Sexton) on Oct 19, 2010 at 23:26 UTC

    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

      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'