use strict;
my $str = '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 -
';
my $regex = qr/(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]/mp;
if ( $str =~ /$regex/g ) {
print "Whole match is ${^MATCH} and its start/end positions can be obtained via \$-[0] and \$+[0]\n";
# print "Capture Group 1 is $1 and its start/end positions can be obtained via \$-[1] and \$+[1]\n";
# print "Capture Group 2 is $2 ... and so on\n";
}
# ${^POSTMATCH} and ${^PREMATCH} are also available with the use of '/p'
# Named capture groups can be called via $+{name}
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 Perl, please visit: http://perldoc.perl.org/perlre.html