import Foundation
let pattern = #"(?:(?<=^)|(?<=\s))((?:2[0-5][0-5]|1[0-9][0-9]|[1-9][0-9]|[0-9])(?:\.(?:2[0-5][0-5]|1[0-9][0-9]|[1-9][0-9]|[0-9])){3})(?=\s|$)"#
let regex = try! NSRegularExpression(pattern: pattern)
let testString = ##"""
IP Address:
93.114.205.169
0.0.0.0
0.0.0.0
10.10.10.10
99.99.99.99
199.199.199.199
255.255.255.255
256.256.256.256
02.02.02.02
111.222.13.255
1.2.3.4
1.2.3.4.5
11.22.33.44
11.22.33.44.55
255.0.1.254
255.0.1.254
In a text 255.0.1.254 there is an IP address
In a text 10.10.10.10 there is an IP address
In a text 93.114.205.169 there is an IP address
Domain:
example.com
https://sub5-7.example.com/
https://sub5-7.example.com
sub.sub2.example.com
www.example.com
https://sub.example.com
http://example.com
ftp://sub.mit-example222.com
In a text www.example.com there is an domain.
In a text https://sub5-7.example.com there is an domain.
In a text www.example.com there is an domain.
URL
93.114.205.169/path
example.com/path
sub.example.com/path
93.114.205.169/path
https://sub5-7.example.com/
http://example.com/
example.com/
sub.example.com/
www.--example.com/
www.examp--le.com/
www.example.co/
www.example.c/
example.com/path
sub.example.com/path
sub.example.com/path
sub.example.com/path
sub.example.com/path/path/path/p/a/q/1$%h
sub.example.com/path/path/path/p/a/q/1$%1fh
sub.example.com/path/path/%aa%1f%3dpath/p/a/q/1$%1fh
https://sub.example.com/path/path
http://sub.example.com/path/path
http://something.com/#$SLJFHsdq32908432098=!~abc
In a text example.com/path there is an URL path.
In a text www.example.com/path there is an URL path.
In a text www.blog.example.com/path there is an URL path.
In a text sub.example.com/paththere is an URL path.
In a text sub.example.com/path/path/path/p/a/q/1$%h there is an URL path.
In a text sub.example.com/path/path/path/p/a/q/ there is an URL path.
"""##
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