import Foundation
let pattern = #"^[a-z][a-z]*(([A-Z][a-z]+)*[A-Z]?|([a-z]+[A-Z])*|[A-Z])$"#
let regex = try! NSRegularExpression(pattern: pattern, options: .anchorsMatchLines)
let testString = #"""
affine3D
lThan30DaysCount
lessThan30DaysCount
lessThan30DaysCountA
greaterThan30LessThan60DaysCount
greaterThan60LessThan90DaysCount
greaterThan90DaysCount
snake_case
PascalCase
2PascalCase
streamIOIO
gREATERDtha
modeADFAFdsADFads
aBabcABCDabcABC
modeADFdsADFads
streamIO
aBCabcABCabcA
aBCabcA
aabc123
aabcABC
deviceSNS
pathASNs
dscpCP
awsVPC
deviceID
gREA1
gREAt
gREAtREAt
cP3
a1
aABC
a123
modeADFsADFads
a1G
modeADFads
supportsIpv6OnIos
pascal2Case
pascal2CaseA
mode2A
mode2A2
mode2A2A
createAMode
createBMode
hTMLParser
hELLO
camel01C
camel01c01
camel01C01
camel01CC01
camel0a1c1
camel0a1C1
camel0ac1b1C1
camelC1
camelCA
camelCa1
camelCa_1
ibsReleaseTestVerificationRegressioNSuite
modeA
pascalCaseA
pascalCase
madeEasy
wonderFul
andMe
context
htmlParser
h
aaA
a
ab
abc
abcd
abcde
camelCasE
aGa
camelCasecamelCasecamelCasecamelCasecamelCasecamelCase
aG
alphabet
camelCase
xmlHttpRequest
newCustomerId
innerStopwatch
youTubeImporter
youtubeImporter
camelC
ibsReleaseTestVerificationRegressionSuite
ibsReleaseTestVerificationRegressioN
"""#
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