use strict;
my $str = '
fourth thourf very veery vry very veryy rsun urns a a this is not pann pout toop topo now we go with smart trams maps amps because declamations anecdotalism reoccupation cornucopiate
';
my $regex = qr/\b
(?# capture each letter up to N of them)
(\w)
(?:(\w)
(?:(\w)
(?:(\w)
(?:(\w)
(?:(\w)
)?
)?
)?
)?
)?
\b
(?# stuff between the first and second words)
\s+
\b
(?# Assert that the same letters appear if we found one before)
(?(1)(?=\w*\1))
(?(2)(?=\w*\2))
(?(3)(?=\w*\3))
(?(4)(?=\w*\4))
(?(5)(?=\w*\5))
(?(6)(?=\w*\6))
(?# assert that the length matches)
(?(6)(\w{6})
|(?(5)(\w{5})
|(?(4)(\w{4})
|(?(3)(\w{3})
|(?(2)(\w{2})
)
)
)
)
)
\b
/mxp;
if ( $str =~ /$regex/g ) {
print "Whole match is ${^MATCH} and its start/end positions can be obtained via \$-[0] and \$+[0]\n";
# print "Capture Group 1 is $1 and its start/end positions can be obtained via \$-[1] and \$+[1]\n";
# print "Capture Group 2 is $2 ... and so on\n";
}
# ${^POSTMATCH} and ${^PREMATCH} are also available with the use of '/p'
# Named capture groups can be called via $+{name}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Perl, please visit: http://perldoc.perl.org/perlre.html