import Foundation
let pattern = #"%5B%22[^ ]+%22%2C1%2C%22%22%2C%22(.*)%22%5D@googleapis.com"#
let regex = try! NSRegularExpression(pattern: pattern, options: .anchorsMatchLines)
let testString = #"""
--batch7717900821286095411
Content-Type: application/http
Content-Transfer-Encoding: binary
Content-ID: <batch7717900821286095411+%5B%22124I1eovpUwJR2Ce6sb4LbtSHgri5BJHM%22%2C1%2C%22%22%2C%22testuser1%40gatewaybeatle%2Ecom%22%5D@googleapis.com>
POST /drive/v2internal/files/124I1eovpUwJR2Ce6sb4LbtSHgri5BJHM/permissions?fields=id%2Cname%2CemailAddress%2Crole%2CphotoLink%2CadditionalRoles%2Ctype%2CwithLink%2Cdomain%2CpermissionDetails%2Ccapabilities%2CselectableRoles%2Cview%2CinapplicableReason%2CexpirationDate%2Cdeleted%2CaudienceId%2CcustomerId%2CisStale&confirmed=false&sendNotificationEmails=true&languageCode=en&supportsTeamDrives=true&alt=json&key=AIzaSyC4JjdyoZPBZbhiXypJRsdhGicms9lgzoA
X-JavaScript-User-Agent: google-api-javascript-client/1.1.0
X-Requested-With: XMLHttpRequest
Content-Type: application/json
X-Goog-Encode-Response-If-Executable: base64
X-Goog-AuthUser: 0
Authorization: SAPISIDHASH 1589278246_b2c8377eb040624a399411f2e7cea308088b32b3
X-ClientDetails: appVersion=5.0%20(Windows)&platform=Win32&userAgent=Mozilla%2F5.0%20(Windows%20NT%2010.0%3B%20WOW64%3B%20rv%3A68.0)%20Gecko%2F20100101%20Firefox%2F68.0
{"additionalRoles":[],"role":"writer","type":"user","value":"testuser1@gatewaybeatle.com"}
--batch7717900821286095411
Content-Type: application/http
Content-Transfer-Encoding: binary
Content-ID: <batch7717900821286095411+%5B%221fbbSghayZHhIJBTSK-ZqQT6_gt_bfcpi%22%2C1%2C%22%22%2C%22testuser1%40gatewaybeatle%2Ecom%22%5D@googleapis.com>
POST /drive/v2internal/files/1fbbSghayZHhIJBTSK-ZqQT6_gt_bfcpi/permissions?fields=id%2Cname%2CemailAddress%2Crole%2CphotoLink%2CadditionalRoles%2Ctype%2CwithLink%2Cdomain%2CpermissionDetails%2Ccapabilities%2CselectableRoles%2Cview%2CinapplicableReason%2CexpirationDate%2Cdeleted%2CaudienceId%2CcustomerId%2CisStale&confirmed=false&sendNotificationEmails=true&languageCode=en&supportsTeamDrives=true&alt=json&key=AIzaSyC4JjdyoZPBZbhiXypJRsdhGicms9lgzoA
X-JavaScript-User-Agent: google-api-javascript-client/1.1.0
X-Requested-With: XMLHttpRequest
Content-Type: application/json
X-Goog-Encode-Response-If-Executable: base64
X-Goog-AuthUser: 0
Authorization: SAPISIDHASH 1589278246_b2c8377eb040624a399411f2e7cea308088b32b3
X-ClientDetails: appVersion=5.0%20(Windows)&platform=Win32&userAgent=Mozilla%2F5.0%20(Windows%20NT%2010.0%3B%20WOW64%3B%20rv%3A68.0)%20Gecko%2F20100101%20Firefox%2F68.0
{"additionalRoles":[],"role":"writer","type":"user","value":"testuser1@gatewaybeatle.com"}
--batch7717900821286095411
Content-Type: application/http
Content-Transfer-Encoding: binary
Content-ID: <batch7717900821286095411+%5B%221n89G34zW8jBWWCobxLCjdhlds-vjDNmR%22%2C1%2C%22%22%2C%22testuser1%40gatewaybeatle%2Ecom%22%5D@googleapis.com>
POST /drive/v2internal/files/1n89G34zW8jBWWCobxLCjdhlds-vjDNmR/permissions?fields=id%2Cname%2CemailAddress%2Crole%2CphotoLink%2CadditionalRoles%2Ctype%2CwithLink%2Cdomain%2CpermissionDetails%2Ccapabilities%2CselectableRoles%2Cview%2CinapplicableReason%2CexpirationDate%2Cdeleted%2CaudienceId%2CcustomerId%2CisStale&confirmed=false&sendNotificationEmails=true&languageCode=en&supportsTeamDrives=true&alt=json&key=AIzaSyC4JjdyoZPBZbhiXypJRsdhGicms9lgzoA
X-JavaScript-User-Agent: google-api-javascript-client/1.1.0
X-Requested-With: XMLHttpRequest
Content-Type: application/json
X-Goog-Encode-Response-If-Executable: base64
X-Goog-AuthUser: 0
Authorization: SAPISIDHASH 1589278246_b2c8377eb040624a399411f2e7cea308088b32b3
X-ClientDetails: appVersion=5.0%20(Windows)&platform=Win32&userAgent=Mozilla%2F5.0%20(Windows%20NT%2010.0%3B%20WOW64%3B%20rv%3A68.0)%20Gecko%2F20100101%20Firefox%2F68.0
{"additionalRoles":[],"role":"writer","type":"user","value":"testuser1@gatewaybeatle.com"}
--batch7717900821286095411
Content-Type: application/http
Content-Transfer-Encoding: binary
Content-ID: <batch7717900821286095411+%5B%22124I1eovpUwJR2Ce6sb4LbtSHgri5BJHM%22%2C1%2C%22%22%2C%22sanityuser%40gatewaybeatle%2Ecom%22%5D@googleapis.com>
POST /drive/v2internal/files/124I1eovpUwJR2Ce6sb4LbtSHgri5BJHM/permissions?fields=id%2Cname%2CemailAddress%2Crole%2CphotoLink%2CadditionalRoles%2Ctype%2CwithLink%2Cdomain%2CpermissionDetails%2Ccapabilities%2CselectableRoles%2Cview%2CinapplicableReason%2CexpirationDate%2Cdeleted%2CaudienceId%2CcustomerId%2CisStale&confirmed=false&sendNotificationEmails=true&languageCode=en&supportsTeamDrives=true&alt=json&key=AIzaSyC4JjdyoZPBZbhiXypJRsdhGicms9lgzoA
X-JavaScript-User-Agent: google-api-javascript-client/1.1.0
X-Requested-With: XMLHttpRequest
Content-Type: application/json
X-Goog-Encode-Response-If-Executable: base64
X-Goog-AuthUser: 0
Authorization: SAPISIDHASH 1589278246_b2c8377eb040624a399411f2e7cea308088b32b3
X-ClientDetails: appVersion=5.0%20(Windows)&platform=Win32&userAgent=Mozilla%2F5.0%20(Windows%20NT%2010.0%3B%20WOW64%3B%20rv%3A68.0)%20Gecko%2F20100101%20Firefox%2F68.0
{"additionalRoles":[],"role":"writer","type":"user","value":"sanityuser@gatewaybeatle.com"}
--batch7717900821286095411
Content-Type: application/http
Content-Transfer-Encoding: binary
Content-ID: <batch7717900821286095411+%5B%221fbbSghayZHhIJBTSK-ZqQT6_gt_bfcpi%22%2C1%2C%22%22%2C%22sanityuser%40gatewaybeatle%2Ecom%22%5D@googleapis.com>
POST /drive/v2internal/files/1fbbSghayZHhIJBTSK-ZqQT6_gt_bfcpi/permissions?fields=id%2Cname%2CemailAddress%2Crole%2CphotoLink%2CadditionalRoles%2Ctype%2CwithLink%2Cdomain%2CpermissionDetails%2Ccapabilities%2CselectableRoles%2Cview%2CinapplicableReason%2CexpirationDate%2Cdeleted%2CaudienceId%2CcustomerId%2CisStale&confirmed=false&sendNotificationEmails=true&languageCode=en&supportsTeamDrives=true&alt=json&key=AIzaSyC4JjdyoZPBZbhiXypJRsdhGicms9lgzoA
X-JavaScript-User-Agent: google-api-javascript-client/1.1.0
X-Requested-With: XMLHttpRequest
Content-Type: application/json
X-Goog-Encode-Response-If-Executable: base64
X-Goog-AuthUser: 0
Authorization: SAPISIDHASH 1589278246_b2c8377eb040624a399411f2e7cea308088b32b3
X-ClientDetails: appVersion=5.0%20(Windows)&platform=Win32&userAgent=Mozilla%2F5.0%20(Windows%20NT%2010.0%3B%20WOW64%3B%20rv%3A68.0)%20Gecko%2F20100101%20Firefox%2F68.0
{"additionalRoles":[],"role":"writer","type":"user","value":"sanityuser@gatewaybeatle.com"}
--batch7717900821286095411
Content-Type: application/http
Content-Transfer-Encoding: binary
Content-ID: <batch7717900821286095411+%5B%221n89G34zW8jBWWCobxLCjdhlds-vjDNmR%22%2C1%2C%22%22%2C%22sanityuser%40gatewaybeatle%2Ecom%22%5D@googleapis.com>
POST /drive/v2internal/files/1n89G34zW8jBWWCobxLCjdhlds-vjDNmR/permissions?fields=id%2Cname%2CemailAddress%2Crole%2CphotoLink%2CadditionalRoles%2Ctype%2CwithLink%2Cdomain%2CpermissionDetails%2Ccapabilities%2CselectableRoles%2Cview%2CinapplicableReason%2CexpirationDate%2Cdeleted%2CaudienceId%2CcustomerId%2CisStale&confirmed=false&sendNotificationEmails=true&languageCode=en&supportsTeamDrives=true&alt=json&key=AIzaSyC4JjdyoZPBZbhiXypJRsdhGicms9lgzoA
X-JavaScript-User-Agent: google-api-javascript-client/1.1.0
X-Requested-With: XMLHttpRequest
Content-Type: application/json
X-Goog-Encode-Response-If-Executable: base64
X-Goog-AuthUser: 0
Authorization: SAPISIDHASH 1589278246_b2c8377eb040624a399411f2e7cea308088b32b3
X-ClientDetails: appVersion=5.0%20(Windows)&platform=Win32&userAgent=Mozilla%2F5.0%20(Windows%20NT%2010.0%3B%20WOW64%3B%20rv%3A68.0)%20Gecko%2F20100101%20Firefox%2F68.0
{"additionalRoles":[],"role":"writer","type":"user","value":"sanityuser@gatewaybeatle.com"}
--batch7717900821286095411
Content-Type: application/http
Content-Transfer-Encoding: binary
Content-ID: <batch7717900821286095411+%5B%22124I1eovpUwJR2Ce6sb4LbtSHgri5BJHM%22%2C1%2C%22%22%2C%22admin%40gatewaybeatle%2Ecom%22%5D@googleapis.com>
POST /drive/v2internal/files/124I1eovpUwJR2Ce6sb4LbtSHgri5BJHM/permissions?fields=id%2Cname%2CemailAddress%2Crole%2CphotoLink%2CadditionalRoles%2Ctype%2CwithLink%2Cdomain%2CpermissionDetails%2Ccapabilities%2CselectableRoles%2Cview%2CinapplicableReason%2CexpirationDate%2Cdeleted%2CaudienceId%2CcustomerId%2CisStale&confirmed=false&sendNotificationEmails=true&languageCode=en&supportsTeamDrives=true&alt=json&key=AIzaSyC4JjdyoZPBZbhiXypJRsdhGicms9lgzoA
X-JavaScript-User-Agent: google-api-javascript-client/1.1.0
X-Requested-With: XMLHttpRequest
Content-Type: application/json
X-Goog-Encode-Response-If-Executable: base64
X-Goog-AuthUser: 0
Authorization: SAPISIDHASH 1589278246_b2c8377eb040624a399411f2e7cea308088b32b3
X-ClientDetails: appVersion=5.0%20(Windows)&platform=Win32&userAgent=Mozilla%2F5.0%20(Windows%20NT%2010.0%3B%20WOW64%3B%20rv%3A68.0)%20Gecko%2F20100101%20Firefox%2F68.0
{"additionalRoles":[],"role":"writer","type":"user","value":"admin@gatewaybeatle.com"}
--batch7717900821286095411
Content-Type: application/http
Content-Transfer-Encoding: binary
Content-ID: <batch7717900821286095411+%5B%221fbbSghayZHhIJBTSK-ZqQT6_gt_bfcpi%22%2C1%2C%22%22%2C%22admin%40gatewaybeatle%2Ecom%22%5D@googleapis.com>
POST /drive/v2internal/files/1fbbSghayZHhIJBTSK-ZqQT6_gt_bfcpi/permissions?fields=id%2Cname%2CemailAddress%2Crole%2CphotoLink%2CadditionalRoles%2Ctype%2CwithLink%2Cdomain%2CpermissionDetails%2Ccapabilities%2CselectableRoles%2Cview%2CinapplicableReason%2CexpirationDate%2Cdeleted%2CaudienceId%2CcustomerId%2CisStale&confirmed=false&sendNotificationEmails=true&languageCode=en&supportsTeamDrives=true&alt=json&key=AIzaSyC4JjdyoZPBZbhiXypJRsdhGicms9lgzoA
X-JavaScript-User-Agent: google-api-javascript-client/1.1.0
X-Requested-With: XMLHttpRequest
Content-Type: application/json
X-Goog-Encode-Response-If-Executable: base64
X-Goog-AuthUser: 0
Authorization: SAPISIDHASH 1589278246_b2c8377eb040624a399411f2e7cea308088b32b3
X-ClientDetails: appVersion=5.0%20(Windows)&platform=Win32&userAgent=Mozilla%2F5.0%20(Windows%20NT%2010.0%3B%20WOW64%3B%20rv%3A68.0)%20Gecko%2F20100101%20Firefox%2F68.0
{"additionalRoles":[],"role":"writer","type":"user","value":"admin@gatewaybeatle.com"}
--batch7717900821286095411
Content-Type: application/http
Content-Transfer-Encoding: binary
Content-ID: <batch7717900821286095411+%5B%221n89G34zW8jBWWCobxLCjdhlds-vjDNmR%22%2C1%2C%22%22%2C%22admin%40gatewaybeatle%2Ecom%22%5D@googleapis.com>
POST /drive/v2internal/files/1n89G34zW8jBWWCobxLCjdhlds-vjDNmR/permissions?fields=id%2Cname%2CemailAddress%2Crole%2CphotoLink%2CadditionalRoles%2Ctype%2CwithLink%2Cdomain%2CpermissionDetails%2Ccapabilities%2CselectableRoles%2Cview%2CinapplicableReason%2CexpirationDate%2Cdeleted%2CaudienceId%2CcustomerId%2CisStale&confirmed=false&sendNotificationEmails=true&languageCode=en&supportsTeamDrives=true&alt=json&key=AIzaSyC4JjdyoZPBZbhiXypJRsdhGicms9lgzoA
X-JavaScript-User-Agent: google-api-javascript-client/1.1.0
X-Requested-With: XMLHttpRequest
Content-Type: application/json
X-Goog-Encode-Response-If-Executable: base64
X-Goog-AuthUser: 0
Authorization: SAPISIDHASH 1589278246_b2c8377eb040624a399411f2e7cea308088b32b3
X-ClientDetails: appVersion=5.0%20(Windows)&platform=Win32&userAgent=Mozilla%2F5.0%20(Windows%20NT%2010.0%3B%20WOW64%3B%20rv%3A68.0)%20Gecko%2F20100101%20Firefox%2F68.0
{"additionalRoles":[],"role":"writer","type":"user","value":"admin@gatewaybeatle.com"}
--batch7717900821286095411
Content-Type: application/http
Content-Transfer-Encoding: binary
Content-ID: <batch7717900821286095411+%5B%22124I1eovpUwJR2Ce6sb4LbtSHgri5BJHM%22%2C1%2C%22%22%2C%22feadmin%40gatewaybeatle%2Ecom%22%5D@googleapis.com>
POST /drive/v2internal/files/124I1eovpUwJR2Ce6sb4LbtSHgri5BJHM/permissions?fields=id%2Cname%2CemailAddress%2Crole%2CphotoLink%2CadditionalRoles%2Ctype%2CwithLink%2Cdomain%2CpermissionDetails%2Ccapabilities%2CselectableRoles%2Cview%2CinapplicableReason%2CexpirationDate%2Cdeleted%2CaudienceId%2CcustomerId%2CisStale&confirmed=false&sendNotificationEmails=true&languageCode=en&supportsTeamDrives=true&alt=json&key=AIzaSyC4JjdyoZPBZbhiXypJRsdhGicms9lgzoA
X-JavaScript-User-Agent: google-api-javascript-client/1.1.0
X-Requested-With: XMLHttpRequest
Content-Type: application/json
X-Goog-Encode-Response-If-Executable: base64
X-Goog-AuthUser: 0
Authorization: SAPISIDHASH 1589278246_b2c8377eb040624a399411f2e7cea308088b32b3
X-ClientDetails: appVersion=5.0%20(Windows)&platform=Win32&userAgent=Mozilla%2F5.0%20(Windows%20NT%2010.0%3B%20WOW64%3B%20rv%3A68.0)%20Gecko%2F20100101%20Firefox%2F68.0
{"additionalRoles":[],"role":"writer","type":"user","value":"feadmin@gatewaybeatle.com"}
--batch7717900821286095411
Content-Type: application/http
Content-Transfer-Encoding: binary
Content-ID: <batch7717900821286095411+%5B%221fbbSghayZHhIJBTSK-ZqQT6_gt_bfcpi%22%2C1%2C%22%22%2C%22feadmin%40gatewaybeatle%2Ecom%22%5D@googleapis.com>
POST /drive/v2internal/files/1fbbSghayZHhIJBTSK-ZqQT6_gt_bfcpi/permissions?fields=id%2Cname%2CemailAddress%2Crole%2CphotoLink%2CadditionalRoles%2Ctype%2CwithLink%2Cdomain%2CpermissionDetails%2Ccapabilities%2CselectableRoles%2Cview%2CinapplicableReason%2CexpirationDate%2Cdeleted%2CaudienceId%2CcustomerId%2CisStale&confirmed=false&sendNotificationEmails=true&languageCode=en&supportsTeamDrives=true&alt=json&key=AIzaSyC4JjdyoZPBZbhiXypJRsdhGicms9lgzoA
X-JavaScript-User-Agent: google-api-javascript-client/1.1.0
X-Requested-With: XMLHttpRequest
Content-Type: application/json
X-Goog-Encode-Response-If-Executable: base64
X-Goog-AuthUser: 0
Authorization: SAPISIDHASH 1589278246_b2c8377eb040624a399411f2e7cea308088b32b3
X-ClientDetails: appVersion=5.0%20(Windows)&platform=Win32&userAgent=Mozilla%2F5.0%20(Windows%20NT%2010.0%3B%20WOW64%3B%20rv%3A68.0)%20Gecko%2F20100101%20Firefox%2F68.0
{"additionalRoles":[],"role":"writer","type":"user","value":"feadmin@gatewaybeatle.com"}
--batch7717900821286095411
Content-Type: application/http
Content-Transfer-Encoding: binary
Content-ID: <batch7717900821286095411+%5B%221n89G34zW8jBWWCobxLCjdhlds-vjDNmR%22%2C1%2C%22%22%2C%22feadmin%40gatewaybeatle%2Ecom%22%5D@googleapis.com>
POST /drive/v2internal/files/1n89G34zW8jBWWCobxLCjdhlds-vjDNmR/permissions?fields=id%2Cname%2CemailAddress%2Crole%2CphotoLink%2CadditionalRoles%2Ctype%2CwithLink%2Cdomain%2CpermissionDetails%2Ccapabilities%2CselectableRoles%2Cview%2CinapplicableReason%2CexpirationDate%2Cdeleted%2CaudienceId%2CcustomerId%2CisStale&confirmed=false&sendNotificationEmails=true&languageCode=en&supportsTeamDrives=true&alt=json&key=AIzaSyC4JjdyoZPBZbhiXypJRsdhGicms9lgzoA
X-JavaScript-User-Agent: google-api-javascript-client/1.1.0
X-Requested-With: XMLHttpRequest
Content-Type: application/json
X-Goog-Encode-Response-If-Executable: base64
X-Goog-AuthUser: 0
Authorization: SAPISIDHASH 1589278246_b2c8377eb040624a399411f2e7cea308088b32b3
X-ClientDetails: appVersion=5.0%20(Windows)&platform=Win32&userAgent=Mozilla%2F5.0%20(Windows%20NT%2010.0%3B%20WOW64%3B%20rv%3A68.0)%20Gecko%2F20100101%20Firefox%2F68.0
{"additionalRoles":[],"role":"writer","type":"user","value":"feadmin@gatewaybeatle.com"}
--batch7717900821286095411--
"""#
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