我試圖域分成不同的類別(子域,域,TLD)時遇到了問題..正則表達式對域的匹配不同部分
我不能想出一個辦法,以匹配任何數量的的子域名,而不是超過我的域名或TLD mathcing。我正在使用PCRE正則表達式。
當前正則表達式:
\s(?:(?<subdomain>[a-z0-9\-]*){0,1}\.){0,3}(?<domain>(?>([a-z0-9\-]+)))\.(?<tld>[a-z\.]{2,6})\s
數據集:
apple.orange.banana.clevername.co.uk
strawberry.apple.orange.banana.clevername.co.uk
tangerine.com.au
simple.com
注:有之前和之後的域空間,他們將永遠是小寫。
的如何這個數據將匹配的一個例子:
apple.orange.banana.clevername.co.uk
子域:apple.orange.banana
域:谷歌
tld:co.uk
如果我將另一個水果添加到子域(strawberry.apple.orange.banana.clevern ame.co.uk),比賽將失敗。如果我將子域正則表達式的{0,3}修改爲更高的數字或無限數量的匹配,它會變得過於貪婪,並且不再以domain/tld的正確匹配結束。的這個實施例:
改性的正則表達式:
\s(?:(?<subdomain>[a-z0-9\-]*){0,1}\.){0,5}(?<domain>(?>([a-z0-9\-]+)))\.(?<tld>[a-z\.]{2,6})\s
匹配結果與新的正則表達式:
strawberry.apple.orange.banana.clevername.co.uk
子域名:strawberry.apple.orange.banana.clevername
域名:
TLD:co.uk
我敢肯定,正則表達式是不是最有效的兩種所以任何幫助或建議,將不勝感激。謝謝!