Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation
 
PerlMonks  

Re: Limiting number of regex matches

by Marshall (Prior)
on Sep 25, 2012 at 20:42 UTC ( #995630=note: print w/ replies, xml ) Need Help??


in reply to Limiting number of regex matches

The easiest way is not to limit the number of regex matches, but to trim the results with a list slice.
Let match global do its thing and then return the first 3 matches.

#!/usr/bin/perl -w use strict; my $str='dog dog horse dog cow dog pig dog'; my @dogs = ($str =~ m/dog/g)[0..2]; print "number of dogs = ".@dogs,"\n"; # the . concatenation puts @dogs in a scalar context # same as print scalar(@dogs) print "@dogs\n"; ################## # so what happens if there aren't 3 dogs? # one way is to use map to filter the undef's out # To return a "nothing at all" from map, use () # undef is a value and that won't work... # # This returns a maximum of 3 dogs if there are that # many or more dogs, otherwise it returns less. # my $second_pack = "dog horse cow"; @dogs = map{$_ or ()}($second_pack =~ /dog/g)[0..2]; print "\nsecond pack = ".@dogs, " dogs\n"; print "@dogs"; __END__ number of dogs = 3 dog dog dog second pack = 1 dogs dog


Comment on Re: Limiting number of regex matches
Download Code

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://995630]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others imbibing at the Monastery: (15)
As of 2015-07-06 12:33 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (74 votes), past polls