import Foundation
let pattern = ##"(?!\d\d)(?![a-zA-Z]{2})(?:(?:>?[:;=%8BXx]['‘’]?[-o*,^ã£]?(?:(?P<mouth>[()|Il])(?P=mouth)*|[\/0\]o\\D\[PpSs<>{}CcOXx*3@ÞþbL&?$#]))|(?:[()\\{}\/<\[>\]DOo0|SsXxlI*@q][-o*,]?['‘’]?[:=8;%Xx]<?))|(?P<head>\()?(?:(?P<eye>[<>v*.^~=ಠ-])?[_.-](?P=eye)|[o0O][_.-][o0O]|>[_.-]?<)['‘’]?(?(head)\))|xD|XD|XP|xP|DX|<3|\^\^|\\o\/|o\/|\\o"##
let regex = try! NSRegularExpression(pattern: pattern, options: .anchorsMatchLines)
let testString = ##"""
:-) :) :D :o) :] :3 :c) :> =] 8) =) :} :^) :ã£)
:-D 8-D 8D x-D xD X-D XD =-D =D =-3 =3 B^D
:-))
>:[ :-( :( :-c :c :-< :ã£C :< :-[ :[ :{
;(
:-|| :@ >:(
:'-( :'(
:'-) :')
D:< D: D8 D; D= DX v.v D-':
>:O :-O :O :-o :o 8-0 O_O o-o O_o o_O o_o O-O
:* :^* ( '}{' )
;-) ;) *-) *) ;-] ;] ;D ;^) :-,
>:P :-P :P X-P x-p xp XP :-p :p
=p :-Þ :Þ :þ :-þ :-b :b d:
>:\ >:/ :-/ :-. :/ :\ =/ =\ :L =L :S >.<
:| :-|
:$
:-X :X :-# :#
O:-) 0:-3 0:3 0:-) 0:) 0;^)
>:) >;) >:-)
}:-) }:) 3:-) 3:)
o/\o ^5 >_>^ ^<_<
|;-) |-O
:-& :&
#-)
%-) %)
<:-|
ಠ_à²
\o/
*\0/*
(>_<)
~_~
-.-'
(=_=)
"""##
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