import Foundation
let pattern = #"^-?[0-9]+$"#
let regex = try! NSRegularExpression(pattern: pattern, options: .anchorsMatchLines)
let testString = #"""
0
00
0000000000
0123456789
X0123456789
01234X56789
0123456789X
1
11
1111111111
1000000000
0000000001
1234567890
X1234567890
12345X67890
1234567890X
2
22
2222222222
2000000000
0000000002
2345678901
X2345678901
23456X78901
2345678901X
3
33
3333333333
3000000000
0000000003
3456789012
X3456789012
34567X89012
3456789012X
4
44
4444444444
4000000000
0000000004
4567890123
X4567890123
45678X90123
4567890123X
5
55
5555555555
5000000000
0000000005
5678901234
X5678901234
56789X01234
5678901234X
6
66
6666666666
6000000000
0000000006
6789012345
X6789012345
67890X12345
6789012345X
7
77
7777777777
7000000000
0000000007
7890123456
X7890123456
78901X23456
7890123456X
8
88
8888888888
8000000000
0000000008
8901234567
X8901234567
89012X34567
8901234567X
9
99
9999999999
9000000000
0000000009
9012345678
X9012345678
90123X45678
9012345678X
-0
-00
-0000000000
-0123456789
-X0123456789
-01234X56789
-0123456789X
-1
-11
-1111111111
-1000000000
-0000000001
-1234567890
-X1234567890
-12345X67890
-1234567890X
-2
-22
-2222222222
-2000000000
-0000000002
-2345678901
-X2345678901
-23456X78901
-2345678901X
-3
-33
-3333333333
-3000000000
-0000000003
-3456789012
-X3456789012
-34567X89012
-3456789012X
-4
-44
-4444444444
-4000000000
-0000000004
-4567890123
-X4567890123
-45678X90123
-4567890123X
-5
-55
-5555555555
-5000000000
-0000000005
-5678901234
-X5678901234
-56789X01234
-5678901234X
-6
-66
-6666666666
-6000000000
-0000000006
-6789012345
-X6789012345
-67890X12345
-6789012345X
-7
-77
-7777777777
-7000000000
-0000000007
-7890123456
-X7890123456
-78901X23456
-7890123456X
-8
-88
-8888888888
-8000000000
-0000000008
-8901234567
-X8901234567
-89012X34567
-8901234567X
-9
-99
-9999999999
-9000000000
-0000000009
-9012345678
-X9012345678
-90123X45678
-9012345678X
X
Y
Z
"""#
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