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.
let pattern = ##"""
# ./configure parser
^(?:
(?:configuring[[:space:]]for[[:space:]](.+))
|
(?:
checking[[:space:]]
(?:
(?:build|host)
[[:space:]]system[[:space:]]type
|
how[[:space:]]to[[:space:]](.+?)
|
for[[:space:]](.+?)
|
whether[[:space:]](?:to[[:space:]])?(.+?)
)[\.]{3}
)
(?:
[[:space:]]+
(?:
$
|
(?:
(yes)
|
(no)
|
(?<!^)(.*)(?=$|\n)
)
)
)?.*
)$
# ^(?:(?:configuring[[:space:]]for[[:space:]](.+))|(?:checking[[:space:]](?:(?:build|host)[[:space:]]system[[:space:]]type|how[[:space:]]to[[:space:]](.+?)|for[[:space:]](.+?)|whether[[:space:]](?:to[[:space:]])?(.+?))[\.]{3})(?:[[:space:]]+(?:$|(?:(yes)|(no)|(?<!^)(.*)(?=$|\n))))?.*)$
"""##
let regex = try! NSRegularExpression(pattern: pattern, options: [.anchorsMatchLines, .caseInsensitive, .allowCommentsAndWhitespace])
let testString = #"""
configuring for zsh 5.7.1-test-2
checking build system type... x86_64-apple-darwin17.7.0
checking host system type... x86_64-apple-darwin17.7.0
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking for special C compiler options needed for large files... no
checking for _FILE_OFFSET_BITS value needed for large files... no
checking how to run the C preprocessor... gcc -E
checking for an ANSI C-conforming const... yes
checking for gcc option to accept ANSI C...
checking whether to use prototypes... yes
checking for grep that handles long lines and -e... /usr/local/bin/ggrep
checking for egrep... /usr/local/bin/ggrep -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking for size_t... yes
checking for working alloca.h... yes
"""#
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