$re = '/(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]/m';
$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 -
';
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
// Print the entire match result
var_dump($matches);
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 PHP, please visit: http://php.net/manual/en/ref.pcre.php