use strict;
my $str = 'Maria Luiza Barreto
Maria Luíza barreto da silva
José João
José João Paulo
José João Silva
Maria Silva
Maria silva
maria Silva
MariaSilva
Maria Silva
Maria Silva
Maria da Silva
Marina Silva
Maria / Silva
Maria Silva
Maria Silva
Maria G. Silva
Maria McDuffy
Getúlio Dornelles Vargas
Maria das Flores
John Smith
John D\'Largy
John Doe-Smith
John Doe Smith
Hector Sausage-Hausen
Mathias d\'Arras
Martin Luther King Jr.
Ai Wong
Chao Chang
Alzbeta Bara
Marcos Assunção
Maria da Silva e Silva
Juscelino Kubitschek De Oliveira
Natalia maria
Natalia aria
Natalia orea
Maria dornelas
María Luiza
Samuel eto\'
Maria da Costa e Silva
Samuel Eto\'o
Maria Luiza Barreto Da Silva
Nathali Grasiela Quintans Andrade da Silva Barreto
Nathali G. Q. A. Da S. Barreto
María
M
Petros barreto da silva
M D
(?<! )[A-Za-zÀ-ú\']{2,}\\\\s[A-Za-zÀ-ú\' ]{2,}';
my $regex = qr/(?mi)^[A-Za-zÀ-ú](?!(?:.*\.\/\ ){2})(?!(?:.* ){10})(?!.*\.[a-z])[A-Za-zÀ-ú. '-]{5,99}[A-Za-zÀ-ú]$/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