Beefy Boxes and Bandwidth Generously Provided by pair Networks
No such thing as a small change

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).

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://111651]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others rifling through the Monastery: (8)
As of 2017-05-23 22:43 GMT
Find Nodes?
    Voting Booth?