import Foundation
let pattern = #"(?:\"(?:(?<=\"(?=[^\n]))[^\n]+?(?=(?<!\\))(?=\"))?\")|(\B'(?:(?<='(?=[^\n]))[^\n]+?(?=(?<!\\))(?='))?')"#
let regex = try! NSRegularExpression(pattern: pattern, options: .anchorsMatchLines)
let testString = ##"""
1. Valid double-quoted strings:
- "Hello"
- "This is a test"
- "123"
- "Special characters: @#$%^&*()_+"
- "Escape sequence: \n"
2. Valid double-quoted strings with additional characters or variables:
- " test aaaaa \" " + asdf
- " test " + ( "aaaaa" ) + gdf
- " test \" " + `" aaaa " + dfg
- " test ' aaaaa \" " + dfg
- ""
3. Valid double-quoted strings with special characters:
- "sas''as\"a1\'2 ! -_?:sa"
- "''"
- "\abnb\ajhgf\crt098& \"'"
4. Invalid double-quoted strings:
- " test " + ( "aaaaa" ) \" saf
- "\\ + \* test " \$ \. dsdfs
- (\" test \" " + " aaaa " sfgd
- ' test ' + aas ( "aaaaa" ) + '\ sd
- '\\ + \* test ' \$ \. trace
- (' test ' as ' + ' aaaa '
- '""'
- '"sas'
- 'ads'
- 'asdasd\"asdsa'
- "klkl"klkl
- "asa\'sasa\\"
- \'\\\'
- "hhhh"klkl"
- 'jkjkjk'klklk'
- '\"\\\"'
- ''
- '\"asa\'sasa\\\"'
- "sasasasa\\\\\\"
1. Valid single-quoted strings:
- 'Hello'
- 'This is a test'
- '123'
- 'Special characters: @#$%^&*()_+'
- 'Escape sequence: \n'
2. Valid single-quoted strings with additional characters or variables:
- ' test aaaaa \' ' + asdf
- ' test ' + ( 'aaaaa' ) + gdf
- ' test \' ' + ' aaaa' + dfg
- ' test " aaaaa \' ' + dfg
- ''
3. Valid single-quoted strings with special characters:
- 'sas""as\'a1\"2 ! -_?:sa'
- '""'
- '\abnb\ajhgf\crt098& \'""'
4. Invalid single-quoted strings:
- ' test ' + ( 'aaaaa' ) \' saf
- '\\ + \* test ' \$ \. dsdfs
- (\' test \' + ' aaaa ' sfgd
- " test \" " + " aaaa " sfgd
- ' test ' + aas ( 'aaaaa' ) + '\ sd
- '\\ + \* test ' \$ \. trace
- (' test ' as ' + ' aaaa '
- "''"
- 'sas"
- "ads'
- 'asdasd\'asdsa'
- "klkl"klkl
- "asa\'sasa\\"
- \'\\\'
- 'hhhh"klkl\'\
- \'jkjkjk"klklk'
- "\'\\\'"
- ''
- '\"asa\'sasa\\\"'
- 'sasasasa\\\\\\'
"""##
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