use strict;
my $str = 'Allowed:
aaaaaaaaaaaa
aaaaaaaaaaa
abaaaaab
baaaaaba
abaaaaba
bbbb
bababa
ababab
aabaabaa
abaabaaa
baaaaaab
baaaaab
baaaaaaaaa
abaaaaaaaa
aabaaaaaaa
aaabaaaaaa
aaaabaaaaa
aaaaabaaaa
aaaaaabaaa
aaaaaaabaa
aaaaaaaaba
aaaaaaaaab
baaaaaba
abaaaaab
babaaaaa
ababaaaa
aababaaa
aaaababa
aaaaabab
baaaabaa
abaaaaba
aabaaaab
baabaaaa
abaabaaa
aabaabaa
aaabaaba
baaaaba
abaaaab
babaaaa
ababaaa
aababaa
aaababa
abba
abbb
bababa
bbaab
abbab
abaabb
baaabaa
abaaaba
aabaaab
baabaaa
abaabaa
abaabaa
aabaaba
Disallowed:
aaaaaaaaaaaaa
aabaabaaa
aababab
bbbba
bbabb
baaaaaaab';
my $regex = qr/^((a{1,4}|a?b|ba){1,3}|(a{1,3}|b){1,4}|((a{2,3}|b){2}|aaba|abaa){2})$/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