This works... but probably only on account of villany. I think for something to be considered a "pattern", it has to show up TWICE, not just once.
$_ = "helloworldhellohellohihellohiworld";
m{
(?{ local ($c1, $c2, $c3) = (0,0,0) })
^
(.+?)
(?:
\1 (?{ local $c1 = $c1 + 1 })
)*
(.+?)
(?:
(?: \1 (?{ local $c1 = $c1 + 1 }) )
|
(?: \2 (?{ local $c2 = $c2 + 1 }) )
)*
(.+?)
(?:
(?: \1 (?{ local $c1 = $c1 + 1 }) )
|
(?: \2 (?{ local $c2 = $c2 + 1 }) )
|
(?: \3 (?{ local $c3 = $c3 + 1 }) )
)*
(?(?{ $c1 && $c2 && $c3 })|(?!))
$
}x and print "<$1> <$2> <$3>\n";
_____________________________________________________
Jeff[japhy]Pinyan:
Perl,
regex,
and perl
hacker.
s++=END;++y(;-P)}y js++=;shajsj<++y(p-q)}?print:??;