import Foundation
let pattern = #"(?<type>.{1})(?<user_access>.{3})(?<group_access>.{3})(?<other_access>.{3}) +(?<oder>[0-9]*) +(?<owner>[a-z]*) +(?<group>[a-z]*) +(?<size>\d*) +(?<month>[a-z]{3}) +(?<day>\d{1,2}) +(?<year>\d{0,4})(?<time>(?<hour>\d{2}):(?<minute>\d{2}))? +(?<filename>(?<basename>.+)\.(?<extension>.*)|(?<no_extension_filename>.*))"#
let regex = try! NSRegularExpression(pattern: pattern, options: [.anchorsMatchLines, .caseInsensitive])
let testString = #"""
total 80
drwxr-xr-x 2 root root 4096 Sep 23 15:20 bin
drwxr-xr-x 3 root root 4096 Sep 3 18:41 boot
drwxr-xr-x 3 root root 4096 Aug 19 20:48 build
drwxr-xr-x 14 root root 3900 Sep 23 15:20 dev
drwxr-xr-x 98 root root 4096 Sep 23 15:20 etc
drwxr-xr-x 4 root root 4096 Oct 6 2014 home
drwxr-xr-x 21 root root 4096 Aug 21 19:49 lib
drwxr-xr-x 2 root root 4096 Jul 8 13:21 lib64
drwx------ 2 root root 16384 Aug 26 2014 lost+found
drwxr-xr-x 2 root root 4096 Aug 26 2014 media
drwxr-xr-x 2 root root 4096 Apr 10 2014 mnt
drwxr-xr-x 2 root root 4096 Aug 26 2014 opt
dr-xr-xr-x 133 root root 0 Sep 23 15:20 proc
drwx------ 4 root root 4096 Sep 23 15:27 root
drwxr-xr-x 22 root root 760 Sep 23 17:40 run
drwxr-xr-x 2 root root 12288 Sep 23 15:20 sbin
drwxr-xr-x 2 root root 4096 Aug 26 2014 srv
dr-xr-xr-x 13 root root 0 Sep 23 15:20 sys
drwxrwxrwt 2 root root 4096 Sep 23 17:40 tmp
drwxr-xr-x 10 root root 4096 Aug 26 2014 usr
drwxr-xr-x 14 root root 4096 Aug 21 19:52 var
"""#
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