import Foundation
let pattern = #"\b(?:a*(?:ha*){2,}h?)\b|\b(?:a*(?:ja*)+j?)\b|\b(?:e*(?:je*)+j?)\b|\b(?:i*(?:ji+)+j?)\b|\b(?:A*(?:JA+)+J?)\b|\b(?:A*(?:HA+)+H?)\b|\b(?:e*(?:he+){2,}h?)\b|\b(?:Ja*(?:ja+)+j?)\b|\b(?:Je*(?:je+)+j?)\b|\bJa+\b|\b(?:Ji*(?:ji+)+j?)\b|\b(?:Ha*(?:ha+)+h?)\b|\b(?:Jo*(?:jo+)+j?)\b|\b(?:o*(?:jo+)+j?)\b|\b(?:a*((?:ja+)|(?:js+))+j?)\b|\b(?:A*((?:JA+)|(?:JS+))+J?)\b"#
let regex = try! NSRegularExpression(pattern: pattern, options: .anchorsMatchLines)
let testString = #"""
jajajajajaja
jejejejeje
jijijijijij
ji
ja
je
hahahahahahaaaaa
Hahahaaa
Hahaaahaaha
hahaahaaaah
haaaaahaaahahahaaaaah
heheeheheeeeheeeheh
jajajaj
jaja
ja
jejejej
jeje
je
jijijiji
jiji
ji
ajajajaja
ahahahaha
ejejejeje
aaajajaja
jajaaajajaaajaaaa
JAJAJAJAJAJAJAJ
HAHAHAHAAAAHAHAHAHAAA
Hahahahahaha
JAJAJAJA
AAJAJAJA
JAJAAAJAJAJAAAAJ
he
hehe
haha
ha
has
hamaca
Jajajajaja
Jaja
Jejejejejeje
Jaa
Jijijijiiiiji
jiiijijijiiijijijiii
Jojojojojoj
jojojoj
Hahaa
Jejeee
jajaaaa
Jajaaaa
jajaj
jajajajsjaja
jajajssjsjsjajsja
jsjsjsjsjsjsj
JAJAJSJAJSSJAJSJSJAJSSSSJ
"""#
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