import Foundation
let pattern = #"(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]"#
let regex = try! NSRegularExpression(pattern: pattern, options: .anchorsMatchLines)
let testString = ##"""
Valid domain name matching.
Vote for it: http://stackoverflow.com/a/30007882/697313
Sample text for testing:
abcdefghijklmnopqrstuvwxyz.ABCDEFGHIJKLMNOPQRSTUVWXYZ
0123456789 +-.,!@#$%^&*();\\/|<>\"\'
12345 -98.7 3.141 .6180 9,000 +42
555.123.4567 +1-(800)-555-2468
foodemo.net
bar.ba.test.co.uk
www.demo.com
http://foo.co.uk/
http://regexr.com/foo.html?q=bar
g.com
g-.com
com.g
-g.com
xn--d1ai6ai.xn--p1ai
xn-fsqu00a.xn-0zwm56d
xn--stackoverflow.com
stackoverflow.xn--com
stackoverflow.co.uk
google.com.au
-0-0o.com
0-0o_.com (underscore not allowed)
a.net
-a.dot
0-0o.com
0-oz.co.uk
0-tension.com.br
0-wh-ao14-0.com-com.net
a-1234567890-1234567890-1234567890-1234567890-1234567890-1234-z.eu.us
a-1234567890-1234567890-1234567890-1234567890-1234567890-12345-z.eu.us (too long)
List of valid domain names:
www.google.com
google.com
mkyong123.com
mkyong-info.com
sub.mkyong.com
sub.mkyong-info.com
mkyong.com.au
g.co
mkyong.t.t.co
List of invalid domain names, and why:
mkyong.t.t.c – Tld must between 2 and 6 long
mkyong,com – Comma is not allow
mkyong – No Tld
mkyong.123 , Tld not allow digit (can easily fix for this)
.com – Must start with [A-Za-z0-9]
mkyong.com/users – No Tld
-mkyong.com – Cannot begin with a hyphen -
mkyong-.com – Cannot end with a hyphen -
sub.-mkyong.com – Cannot begin with a hyphen -
sub.mkyong-.com – Cannot end with a hyphen -
"""##
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