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>