import Foundation
let pattern = ##"(?:['\*\?\x5c`][^\n\/]+\/|\/[^\/]+?['\*\?\x5c`]|\$[!#-\$\(\*\-0-9\?-\[_a-\{])"##
let regex = try! NSRegularExpression(pattern: pattern, options: .anchorsMatchLines)
let testString = #"""
false_positive=do+you+want+a+pizza?+with+mozzarella/pomodoro?
host=www.google.com;cd+/etc;/bin$u/ca*+passwd
host=www.google.com;cat$@/etc$@/passwd
host=www.google.com;cd+/et*;/bi*$u/ca*+passwd
host=www.google.it;/bin/c*t$u+/etc$u/passwd
host=www.google.it;/bin/cat$u+/*tc$u/passwd
host=www.google.it;cd+/etc;/bin/c*t+passwd
host=www.google.com;/bin/ca?+/et?/passwd
host=www.google.com;cat+/etc/${a}passwd
host=www.google.com;cat+/etc/$(echo)passwd
host=www.google.com;cat+/etc/`echo`passwd
host=www.google.com;cat+/etc${a}/passwd
host=www.google.com;cat+/etc$(echo)/passwd
host=www.google.com;cat+/etc`echo`/passwd
host=www.google.com;cat+/etc/passwd${a}
host=www.google.com;cat+/etc/passwd$(echo)
host=www.google.com;cat+/etc/passwd`echo`
host=www.google.com;ca?+/et?/pa??wd
host=www.google.com;cd+etc/+ca?+passwd
host=www.google.com;?at+/?tc/passwd
host=www.google.com;c\a\t+/e\t\c/pa\s\swd
host=www.google.com;cd+/etc;c\at+p\a\sswd
host=www.google.com;cd+/etc;c'at'+p'a'sswd
host=www.google.com;c$@at /et$@c/pas$@swd
host=www.google.com;c$!at /et$!c/pas$!swd
host=www.google.com;c$*at /et$*c/pas$*swd
host=www.google.com;c$?at /et$?c/pas$?swd
host=www.google.com;c$-at /et$-c/pas$-swd
host=www.google.com;c$_at /et$_c/pas$_swd
host=www.google.com;c$$at /et$$c/pas$$swd
"""#
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