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.
// WARNING: You included a flag that Swift doesn't support: u
// When this flag is set, it makes the pattern and subject strings to be treated as unicode.
// Swift already treats the pattern and subject strings as unicode by default, so including this flag is redundant.
// WARNING: You included a flag that Swift doesn't support: J
// Wehn this flag is set, it allows duplicated capturing group names.
// By default, Swift captures only the last value matched for a repeated capture group.
// As an alternative, the pattern can be modified to contain one capturing group per group you want to get in the result.
// WARNING: You included a flag that Swift doesn't support: A
// When this flag is set, it causes the pattern to be "anchored", that is, it is constrained to match only at the start of the string which is being searched (the "subject string").
// As an alternative, this effect can also be achieved by appropriate constructs in the pattern itself.
// WARNING: You included a flag that Swift doesn't support: U
// When this flag is set, it inverts the "greediness" of the quantifiers so that they are not greedy by default, but become greedy if followed by '?'.
// As an alternative, this effect can also be achieved by setting a (?U) modifier setting within the pattern or by a question mark behind a quantifier (e.g. .*?).
// WARNING: You included a flag that Swift doesn't support: D
// When this flag is set, it forces the a dollar sign ('$'), to always match end of the string, instead of end of the line. This option is ignored if the 'm' flag is set.
// There's no equivalent implementation of this flag in Swift, but you may want to check the 'm' flag instead.
let pattern = ##"""
$scope.passwordRegex2 = ^(?=.*[^a-zA-Z0-9`~!@#$%^&*()-=_+,.<>?;':"\[\]{}\\|]).{1,150}$
"""##
let regex = try! NSRegularExpression(pattern: pattern, options: [.anchorsMatchLines, .caseInsensitive, .allowCommentsAndWhitespace, .dotMatchesLineSeparators])
let testString = #"""
5265736f75726365206964202334
"""#
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