2011-10-22 111 views
2

我正在嘗試查找域 - 除子域外的所有內容。正則表達式 - 解析域問題

我有這個正則表達式現在:

(?:[-a-zA-Z0-9]+\.)*([-a-zA-Z0-9]+(?:\.[a-zA-Z]{2,3})){1,2} 

此工程之類的東西:

domain.tld 
subdomain.tld 

但它運行與頂級域名的麻煩,如 「.com.au」 或」 .CO。英國「:

domain.co.uk (finds co.uk, should find domain.co.uk) 
subdomain.domain.co.uk (finds co.uk, should find domain.co.uk) 

任何想法?

+2

什麼語言?... –

+0

text1.text2.text3可能是subdomain.domain.suffix或者它可能是domain.suffixPart1.suffixPart2。正則表達式不是答案。 – Gibron

+0

@Mitch - 我沒有列出它,因爲我認爲它不相關,因爲我可以使它工作。我使用PHP,但可以從任何語言轉置正則表達式,使其工作。 –

回答

3

我不確定這個問題是否「合理可解」; Mozilla維護着a list of 'public suffix' domains,旨在幫助瀏覽器作者只接受一個管理控制域中的cookie(例如,防止某人設置有效的*.co.uk.*.union.aero.的cookie)。它顯然不是完美的(接近尾聲,你會發現一長串is-a-caterer.com風格的域名,所以foo.is-a-caterer.com無法設置將被bar.is-a-caterer.com使用的cookie,但is-a-caterer.com與你一樣完全是一個「域名」 )

所以,如果你準備按照提供的方式使用列表,你可以寫一個快速的小解析器,知道如何應用通用規則和異常來確定給定輸入字符串的位置您的「域」來了,只返回你所感興趣的部分

我想象的更簡單的方法,是註定要失敗的。一些ccTLDs.ca不使用二級域名,一些如.br使用幾十個,有些像lib.or.us等幾個級別遠離「域名」,如multnomah.lib.or.us。除非您使用的策劃列表中哪些域是公共後綴,否則註定會出現一些不重要的輸入字符串集。

+0

謝謝你的回答!我要麼嘗試找到一個已經存在或讓我自己的:) –