import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "^(?<name>[^.,?;:\\s]+)$|^(?:(?<honorific>(?:mrs?|ms|dr|prof|rev|hon)\\.?|miss|sir|dame|lord|lady)\\s+)?(?:(?<given_name>(?<first_name>[^.,?;:\\s]+\\.?)(?:\\s+(?<middle_name>(?:[^.,?;:\\s]+\\.?)(?:\\s+[^.,?;:\\s]+\\.?)*?))??)\\s+)??(?:(?<family_name>(?:(?:(?:(?:a|ab|af|ap|abu|aït|al|ālam|at|ath|aust|austre|bar|bath|bat|ben|bin|ibn|bet|bint|da|das|de la|degli|del|dele|della|der|di|dos|du|e|el|fetch|vetch|fitz|i|ka|kil|gil|la|le|lille|lu|m'|mac|mc|mck|mhic|mic|mala|mellom|myljom|na|ณ|ned|nedre|neder|ngā|nic|ní|nin|nord|norr|ny|o|ó|ua|uí|opp|upp|öfver|ost|öst|öster|øst|østre|över|øvste|øvre|øver|öz|pour|putra|putera|putri|puteri|setia|setya|stor|söder|sør|sønder|syd|søndre|syndre|søre|te|ter|ter|tre|van|van de|van den|van der|van het|van 't|väst|väster|verch|erch|vest|vestre|vesle|vetle|von|war|zu|von und zu)\\s)?[^.,!?;:\\s]+)-)?(?:(?:a|ab|af|ap|abu|aït|al|ālam|at|ath|aust|austre|bar|bath|bat|ben|bin|ibn|bet|bint|da|das|de la|degli|del|dele|della|der|di|dos|du|e|el|fetch|vetch|fitz|i|ka|kil|gil|la|le|lille|lu|m'|mac|mc|mck|mhic|mic|mala|mellom|myljom|na|ณ|ned|nedre|neder|ngā|nic|ní|nin|nord|norr|ny|o|ó|ua|uí|opp|upp|öfver|ost|öst|öster|øst|østre|över|øvste|øvre|øver|öz|pour|putra|putera|putri|puteri|setia|setya|stor|söder|sør|sønder|syd|søndre|syndre|søre|te|ter|ter|tre|van|van de|van den|van der|van het|van 't|väst|väster|verch|erch|vest|vestre|vesle|vetle|von|war|zu|von und zu)\\s+)?[^.,?;:\\s]+)??(?:,?\\s+(?<suffix>Sr\\.?|Snr|Jr\\.?|Jnr|[IVX]+))?)?(?<post_nominal>,.*)?$";
final String string = "John Doe\n"
+ "Mary Jane Smith\n"
+ "Jean-Luc van der Berg, Sr.\n"
+ "Maria de la Cruz\n"
+ "Mohamed bin Ahmed al-Farsi\n"
+ "Anna-Nicole Johnson Jr.\n"
+ "Carlos Alberto dos Santos\n"
+ "Sophie von und zu Rhein\n"
+ "Li Na\n"
+ "O'Connor Fitzpatrick III\n"
+ "Yusuf ibn Abdullah\n"
+ "Emma-Louise O'Reilly\n"
+ "Juan Carlos de la Torre\n"
+ "Fatima bint Mohammed\n"
+ "Hans-Christian Andersen\n"
+ "Elena di Matteo\n"
+ "Abdul-Rahman al-Hashimi\n"
+ "Isabella della Rovere\n"
+ "Jean-Pierre Dupont, Jr\n"
+ "Sara van den Berg\n"
+ "John Q. Public\n"
+ "Dr. Jane Doe, PhD\n"
+ "Prof. John Smith, MD\n"
+ "Mr. James Walter Thomas Jr.\n"
+ "Ms. Emily Davis, CPA\n"
+ "Dr. Michael David Jacob Brown, DDS\n"
+ "Mrs. Sarah Wilson, RN\n"
+ "Rev. Thomas Anderson, DD\n"
+ "Mr. Adams\n"
+ "T'Challa\n"
+ "ǃXóõ ǁKaru\n"
+ "ǃHõã ǂNuka\n"
+ "J. K. Rowling\n"
+ "John Jacob Jingleheimer Schmidt";
final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE | Pattern.CASE_INSENSITIVE);
final Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
System.out.println("Full match: " + matcher.group(0));
for (int i = 1; i <= matcher.groupCount(); i++) {
System.out.println("Group " + i + ": " + matcher.group(i));
}
}
}
}
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 Java, please visit: https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html