import Foundation
let pattern = #"(?mi)^[A-Za-zÀ-ú](?!(?:.*\.\/\ ){2})(?!(?:.* ){10})(?!.*\.[a-z])[A-Za-zÀ-ú. '-]{5,99}[A-Za-zÀ-ú]$"#
let regex = try! NSRegularExpression(pattern: pattern, options: .anchorsMatchLines)
let testString = #"""
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,}
"""#
let stringRange = NSRange(location: 0, length: testString.utf16.count)
let matches = regex.matches(in: testString, range: stringRange)
var result: [[String]] = []
for match in matches {
var groups: [String] = []
for rangeIndex in 1 ..< match.numberOfRanges {
let nsRange = match.range(at: rangeIndex)
guard !NSEqualRanges(nsRange, NSMakeRange(NSNotFound, 0)) else { continue }
let string = (testString as NSString).substring(with: nsRange)
groups.append(string)
}
if !groups.isEmpty {
result.append(groups)
}
}
print(result)
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 Swift 5.2, please visit: https://developer.apple.com/documentation/foundation/nsregularexpression