import Foundation
let pattern = #"I'm logged in as (?:a\s|an\s)(?:"([^"]*)"\s)?(?:user|customer)\s(?:(?:for[\sa\s|\san\s]?)(?:"([^"]*)"\s))?"#
let regex = try! NSRegularExpression(pattern: pattern)
let testString = #"""
Given I'm logged in as a user for a "password change" to eCommerce
Given I'm logged in as an "inactive" user for a "password change" to eCommerce
Given I'm logged in as an "inactive" user to eCommerce
Given I'm logged in as a "simple" user to eCommerce
Given I'm logged in as a user in a "shared" account to eCommerce
Given I'm logged in as a user in a "bucket" account to eCommerce
Given I'm logged in as a user for "email notification tests" to eCommerce
Given I'm logged in as a user with "cs admin and sales admin" roles to eCommerce
Given I'm logged in as a user with "cs & bb" roles for a "passwd change" to eCommerce
Given I'm logged in as an "inactive" user with "cs admin" roles to eCommerce
Given I'm logged in as "ducking" user with "ducking" roles to eCommerce
"""#
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