use strict;
my $str = 'jajajajajaja
jejejejeje
jijijijijij
ji
ja
je
hahahahahahaaaaa
Hahahaaa
Hahaaahaaha
hahaahaaaah
haaaaahaaahahahaaaaah
heheeheheeeeheeeheh
jajajaj
jaja
ja
jejejej
jeje
je
jijijiji
jiji
ji
ajajajaja
ahahahaha
ejejejeje
aaajajaja
jajaaajajaaajaaaa
JAJAJAJAJAJAJAJ
HAHAHAHAAAAHAHAHAHAAA
Hahahahahaha
JAJAJAJA
AAJAJAJA
JAJAAAJAJAJAAAAJ
he
hehe
haha
ha
has
hamaca
Jajajajaja
Jaja
Jejejejejeje
Jaa
Jijijijiiiiji
jiiijijijiiijijijiii
Jojojojojoj
jojojoj
Hahaa
Jejeee
jajaaaa
Jajaaaa
jajaj
jajajajsjaja
jajajssjsjsjajsja
jsjsjsjsjsjsj
JAJAJSJAJSSJAJSJSJAJSSSSJ
';
my $regex = qr/\b(?:a*(?:ha*){2,}h?)\b|\b(?:a*(?:ja*)+j?)\b|\b(?:e*(?:je*)+j?)\b|\b(?:i*(?:ji+)+j?)\b|\b(?:A*(?:JA+)+J?)\b|\b(?:A*(?:HA+)+H?)\b|\b(?:e*(?:he+){2,}h?)\b|\b(?:Ja*(?:ja+)+j?)\b|\b(?:Je*(?:je+)+j?)\b|\bJa+\b|\b(?:Ji*(?:ji+)+j?)\b|\b(?:Ha*(?:ha+)+h?)\b|\b(?:Jo*(?:jo+)+j?)\b|\b(?:o*(?:jo+)+j?)\b|\b(?:a*((?:ja+)|(?:js+))+j?)\b|\b(?:A*((?:JA+)|(?:JS+))+J?)\b/mp;
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