import Foundation
let pattern = #"(gmai|ggmail|gmial|gmaol|gmil|iclould|gmeil|iclouds|icoud|hotmial|yahio|gmell|hotmil|gmailz|iclound|gmaio|gmile|gmaul|iclud|gmsil|gamil|ail|gnail|yhoo|gmal|gmaill|yaho|yshoo|gimail|gemail|gmail\.com)\.(com)$"#
let regex = try! NSRegularExpression(pattern: pattern, options: [.anchorsMatchLines, .caseInsensitive])
let testString = #"""
gmai.com
gmial.com
gmaol.com
gmil.com
iclould.com
gmeil.com
iclouds.com
icoud.com
ggmail.com
hotmial.com
yahio.com
gmell.com
hotmil.com
gmailz.com
iclound.com
gmaio.com
gmile.com
gmaul.com
iclould.com
gmaul.com
iclud.com
gmsil.com
yahoo.con
gamil.com
gmail.co
ail.com
gnail.com
gmal.com
gail.com
yhoo.com
hmail.com
gmaill.com
yaho.com
yshoo.com
g.mail.com
yahoo.co
g-mail.com
gmail.comm
gmail.vom
icloud.con
hotmail.con
gimail.com
gmail.cim
gemail.com
gmail.com.com
"""#
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