Jeff Pang wrote:
> yes,John's code work well too.But I still don't know why this code
> can't run correctly:
> 
> next unless /(\S+).*(\d+\.\d+\.\d+\.\d+)/s;
> 
> When I run it,I get these results:
> 
> 364     2.168.2.20
> 286.4   2.168.2.21
> 264.4   2.168.2.22
> 138     2.168.2.23
> 562.3   2.168.2.24
> 80.7    2.168.2.25
> 355     2.168.2.26
> 266.5   2.168.2.27
> 327     2.168.2.28
> 
> 
> somethings as '19' have lost.

That is because .* is greedy and will match everything to the end of the
string and then backtrack until (\d+\.\d+\.\d+\.\d+) matches which specifies
that the first \d+ only has to match at least one digit.

Since the two fields start and end with digits you could do this instead:

next unless /([\d.]+)\D+(\d+\.\d+\.\d+\.\d+)/;


John
-- 
use Perl;
program
fulfillment

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to