2010-08-21 21 views
3

如何獲取只包含domain.tld的字符串?preg_match to domain.tld

if (preg_match('^(?:[-A-Za-z0-9]+\.)+[A-Za-z]{2,6}$', $domain)) 
echo "domain.tld found!"; 

但對正則表達式^(?:[-A-Za-z0-9]+\.)+[A-Za-z]{2,6}$,子域也沒關係。但我只想檢查「domain.tld」。我應該使用什麼正則表達式?

謝謝。

回答

6
if (preg_match('/^[-a-z0-9]+\.[a-z]{2,6}$/', strtolower($domain))) 
    echo "domain.tld found!"; 

將是明顯的答案。你可能永遠是對的TLD部分更具體的,如果你想刪除誤報:

if (preg_match('/^[-a-z0-9]+\.[a-z][a-z]|biz|cat|com|edu|gov|int|mil|net|org|pro|tel|aero|arpa|asia|coop|info|jobs|mobi|name|museum|travel$/', strtolower($domain))) 
    echo "domain.tld found!"; 

如果你想拼出國家代碼頂級域也,這裏的當前列表:

if (preg_match('/^[-a-z0-9]+\.a[cdefgilmnoqrstuwxz]|b[abdefghijmnorstvwyz]|c[acdfghiklmnoruvxyz]|d[ejkmoz]|e[cegrstu]|f[ijkmor]|g[abdefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|m[acdeghklmnopqrstuvwxyz]|n[acefgilopruz]|om|p[aefghklmnrstwy]|qa|r[eosuw]|s[abcdeghijklmnortuvyz]|t[cdfghjklmnoprtvwz]|u[agksyz]|v[aceginu]|w[fs]|y[et]|z[amw]|biz|cat|com|edu|gov|int|mil|net|org|pro|tel|aero|arpa|asia|coop|info|jobs|mobi|name|museum|travel$/', strtolower($domain))) 
    echo "domain.tld found!"; 

我會也接受了國際頂級域名

xn--p1ai|xn--fiqs8s|xn--fiqz9s|xn--o3cw4h|xn--wgbh1c|xn--zckzah|xn--0zwm56d|xn--deba0ad|xn--g6w251d|xn--j6w193g|xn--kprw13d|xn--kpry57d|xn--pgbs0dh|xn--jxalpdlp|xn--kgbechtv|xn--fzc2c9e2c|xn--ygbi2ammx|xn--9t4b11yi5a|xn--mgbaam7a8h|xn--mgbayh7gpa|xn--80akhbyknj4f|xn--xkc2al3hye2a|xn--11b5bs3a9aj6g|xn--mgberp4a5d4ar|xn--hgbk6aj7f53bba|xn--hlcj6aya9esc7a 

,或者至少xn--[a-z0-9]+

因此,那些加.arpa

if (preg_match('^[-a-z0-9]+\.a[cdefgilmnoqrstuwxz]|b[abdefghijmnorstvwyz]|c[acdfghiklmnoruvxyz]|d[ejkmoz]|e[cegrstu]|f[ijkmor]|g[abdefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|m[acdeghklmnopqrstuvwxyz]|n[acefgilopruz]|om|p[aefghklmnrstwy]|qa|r[eosuw]|s[abcdeghijklmnortuvyz]|t[cdfghjklmnoprtvwz]|u[agksyz]|v[aceginu]|w[fs]|y[et]|z[amw]|biz|cat|com|edu|gov|int|mil|net|org|pro|tel|aero|arpa|asia|coop|info|jobs|mobi|name|museum|travel|arpa|xn--[a-z0-9]+$', strtolower($domain))) 
+0

提取http://www.example.com他們不工作 – transilvlad 2012-10-07 20:01:28

+0

取決於你正在尋找通過什麼時,^可能沒有必要。例如,如果您通過電子郵件列表進行搜索,則應刪除^,然後這將起作用。 – zeusstl 2016-08-25 16:21:08

+0

@zeusstl對。 – Charles 2016-08-25 17:50:01

1

你想找到一個特定文本domain.tld而與A-Za-z0-9字符類的組合正則表達式匹配幾乎所有的文本。你爲什麼不乾脆做:

if (strpos('domain.tld', $domain) !== false) { 
    echo "domain.tld found!"; 
} 
0

something http://www.example.com/page/blabla.html some thingggggg

<?php 
preg_match('/((http:||https:)\/\/.*?)[\/||\n||\s]/s', $f,$n); 
echo $n[1]; 
?>