import Foundation
let pattern = ##"^(?!.*@media)[\t ]*([a-zA-Z#.:*[][^{\/]*\s*){[\s\S]*?}"##
let regex = try! NSRegularExpression(pattern: pattern, options: .anchorsMatchLines)
let testString = ##"""
a {color: red !important;}
#p1 {
margin-top: 20px !important
}
/* Client-specific styles */
.ExternalClass,
.ExternalClass p,
.ExternalClass span,
.ExternalClass font,
.ExternalClass td,
.ExternalClass div {
line-height: 100%;
}
a {}
@media query {
a {
display:none
}
}
a
{ display:none }
}
/* Media query for mobile viewport
#asset_container * Developer: hero graphics should be 2 x width for HD rendering.
*/
@media only screen and (max-width: 480px){
table[class=max-width-pad] {
max-width: 100% !important;
width: 100% !important;
padding-top: 15px !important;
height: auto !important;
}
#asset_container table[class=max-width]{
max-width: 100% !important;
width: 100% !important;
height: auto !important;
}
#asset_container table[class=container]{
margin: 0 auto !important;
}
#asset_container .desktop-masthead{
display: none !important;
}
#asset_container *[class].hidden. *[class=desktop-masthead]{
display: none !important;
}
#asset_container *[class].elastic{
width: 100% !important;
height: auto !important;
}
#asset_container *[class].centered{
text-align: center !important;
}
#asset_container *[class].fluid, #asset_container [class=fluid-mob]{
width: 100% !important;
}
[class=fluid-mob] {
#asset_container position: relative;
}
.mobile-show{
display: table-cell !important;
width: auto !important;
height: auto !important;
max-height: none !important;
overflow: visible !important;
visibility: visible !important;
position: relative !important;
text-align: center !important;
}
#asset_container .show-mob{
display: block !important;
max-height: none !important;
width: auto !important;
visibility: visible !important;
}
#asset_container *[class].mob-masthead{
width: 100% !important;
display: block !important;
height: auto !important;
max-height: none !important;
padding: 0 !important;
}
#asset_container *[class].mob-masthead-img{
position: absolute !important;
top: 0px !important;
display: block !important;
height: auto !important;
max-height: none !important;
padding: 0 !important;
width: auto !important;
}
[class=fluid-mob] {
display: table-cell !important;
width: auto !important;
height: auto !important;
max-height: none !important;
overflow: visible !important;
visibility: visible !important;
position: relative !important;
text-align: center !important;
}
}
"""##
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