Beefy Boxes and Bandwidth Generously Provided by pair Networks DiBona
Welcome to the Monastery
 
PerlMonks  

Re: Patter Finding

by nardo (Friar)
on Sep 11, 2001 at 06:21 UTC ( #111651=note: print w/ replies, xml ) Need Help??


in reply to Pattern Finding

The pattern /^(.+?)\1*(.+?)(?:\1|\2)*(.+?)(?:\1|\2|\3)+$/ will find the three patterns and put them in $1, $2, and $3. You can use a function to build this regex:

sub findpattern { my $data = shift; my $num = shift; my $re; my $i; my @retval; $re = '^'; for($i = 1; $i <= $num; $i++) { $re .= '(.+?)(?:'.join('|', map("\\$_", 1..$i)).')'; if($i == $num) { $re .= '+'; } else { $re .= '*'; } } $re .= '$'; if($data =~ /$re/) { for($i = 1; $i <= $num; $i++) { push(@retval, ${$i}); } return @retval; } return undef; }
If passed the data and the number of patterns it will return a list of the patterns or undef if unable to find them (at least one pattern must be repeated more than once).


Comment on Re: Patter Finding
Select or Download Code

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others cooling their heels in the Monastery: (4)
As of 2014-04-21 00:12 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    April first is:







    Results (489 votes), past polls