use strict;
my $str = 'Kamal Manil
Kamal O\'Neil
Kamal Manil Malaka
Kamal Al-Shaba
Al-shaba
O\'neil
Ol\'Neil
Jo Jo
Jo
Kamal Manil
Kamal O\' Neil
Kamal Manil Malaka
Kamal Al- Shaba
Al -shaba
O \'neil
Jo Jo
A B C Jo
Kamal SDF -\'\'\'\'sdf\'\'-
A
a
A B
-Shana
\'Neil
-shaba
\'neil
([A-Z][a-z]+(?![\\\'\\-]))';
my $regex = qr/^(([A-Z][a-z]+)(?=[\ ])|([A-Z][a-z]*[\'\-])(?=[A-Z]?[a-z]+)|([A-Z][a-z]+)(?![\ '\-])|(?<=[\'\-])([a-z]+)|(?<=[a-z])([\ ])(?=[A-Z]))+$/msp;
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