import Foundation
// WARNING: You included a flag that Swift doesn't support: X
// When this flag is set, it causes any backslash in the pattern that is followed by a letter that has no special meaning to cause an error.
// By default in Swift, a backslash followed by a letter with no special meaning will be treated as a literal.
let pattern = #"^(?P<deutsch>(?:(?P<subjekt>(?:in\s)?(?:(?P<sich>sich)|etw\.|jd[mn]\.))\s)*(?P<wort>[\wäÄéöÖüÜß]+)(?:\s(?:(?P<rektion>(?:von|für|an)\s\((?:Dat|Akk)\))|\((?P<extra>[^\)]+)\)))*)\s(?P<definition>(?:[\wáéíóöőúüűÁÉÍÓÖŐÚÜŰ]|[ :,\/\(\);]|\-\n)+)$"#
let regex = try! NSRegularExpression(pattern: pattern, options: .anchorsMatchLines)
let testString = #"""
abnehmen (nahm ab, abge-
nom men) itt: csökken, fogy
sich abwenden von (Dat)
elfordul vkitől/vmitől
sich etw. anhören meghallgat vmit
anregen (fel)élénkít, felpezs-
dít, ösztönöz
jdm. auffallen (fiel auf, ist auf-
gefallen) feltűnik vkinek vmi
sich etw. ausleihen (lieh aus,
ausgeliehen) kikölcsönöz magának vmit
aussterben (starb aus, ist aus-
gestorben) kihal
auszeichnen itt: jellemez vkit/vmit, jellemző vkire/vmire
behandeln kezel vkit/vmit; tárgyal/kifejt vmit
benachrichtigen értesít
jdn. bilden képez, művel vkit
davonlaufen (lief davon, ist
davongelaufen) elfut
jdm. drohen (meg)fenyeget vkit
durchlesen (las durch, durch-
gelesen) átolvas
in etw. eintauchen (tauchte
ein, ist eingetaucht) bele-
merül vmibe
sich entscheiden für (Akk)
(entschied, entschieden)
dönt vmi/vki mellett
jdn. erwischen bei (Dat) vkit
rajtakap vmin
fesseln lebilincsel, leköt
fördern erősít, (elő)segít, támogat
jdm. gelingen (gelang, ist ge-
lungen) sikerül vkinek vmi
jdm. etw. gestehen (gestand,
gestanden) bevall vkinek vmit
graben (grub, gegraben) itt: (bele)vés, (bele)metsz
sich kümmern um (Akk) törő-
dik vkivel/vmivel
liegen an (Dat) (lag, gelegen)
múlik vkin/vmin, függ vkitől/vmitőlloben dicsér
senken csökkent
schulen fejleszt, képez
schwanken (zwischen) inga-
dozik, nem tud dönteni (dolgok között)
jdm. etw. stehlen (stahl, ge-
stoh len) ellop vkitől vmit
steigern növel, fokoz
übernehmen (übernahm, über-
nommen) átvesz, (át)vállal
überraschen meglep
überreden zu (Dat) rábeszél vmire
übersehen (übersah, überse-
hen) nem vesz észre, elnéz
etw. übersetzen lefordít
vergleichen (verglich, vergli-
chen) összehasonlít
verlernen elfelejt
vermitteln közvetít
vertonen megzenésít
vervielfältigen sokszorosít
verwenden használ
jdm. etw. vorlesen (las vor,
vor gelesen) felolvas vkinek vmit
etw. vorstellen bemutat vmit
zusammenstellen összeállít
"""#
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