2010-07-07 16 views
8

क्या किसी को डोमेन.सीसीटीएलडी से मेल खाने के लिए नियमित अभिव्यक्ति पता है? मैं सबडोमेन नहीं चाहता, केवल "परमाणु डोमेन"। उदाहरण के लिए, docs.google.com मिलान नहीं होता है, लेकिन google.com करता है। हालांकि, यह .co.uk, सीसीटीएलडी जैसी चीजों से जटिल हो जाता है। क्या किसी को समाधान पता है? अग्रिम में धन्यवाद।डोमेन से मिलान करने के लिए Regex .CCTLD

संपादित करें: मुझे एहसास हुआ है कि मुझे john.doe.google.co.uk जैसे कई सबडोमेन से निपटना होगा। पहले से कहीं अधिक समाधान की आवश्यकता है: पी।

+0

आप स्पष्ट रूप से एक regex की जरूरत है, या एक समारोह में यह पर्याप्त करने के लिए होगा:

suffixes = parse_suffix_list("suffix_list.txt") 

अब हम कोड की पहचान हैं कि कोई डोमेन नाम पैटर्न कुछ-name.suffix से मेल खाता है की आवश्यकता होगी ? – Benson

+0

यह एक बहुत बड़ा रेगेक्स बन जाएगा, क्योंकि आपको सभी सीसीएसएलडी को विशेष मामलों के रूप में पेश करने की आवश्यकता होगी, और सीसीएसएलडी के बहुत सारे (और मेरा मतलब है)। ब्राजील में 66 हैं! – You

+0

@ बेन्सन, एक फ़ंक्शन काम करेगा, जब तक कि डोमेन की एक लंबी सूची में डोमेन.cctld को – Tom

उत्तर

3

उपर्युक्त आपकी टिप्पणी के आधार पर, मैं इस प्रश्न को दोबारा परिभाषित करने जा रहा हूं - एक रेगेक्स बनाने के बजाय, हम एक ऐसा फ़ंक्शन तैयार करेंगे जो उनसे मेल खाएगा, और डोमेन नामों की सूची को फ़िल्टर करने के लिए उस फ़ंक्शन को लागू करेगा जिसमें केवल प्रथम श्रेणी डोमेन शामिल हैं, उदाहरण के लिए google.com, amazon.co.uk।

सबसे पहले, हमें टीएलडी की एक सूची की आवश्यकता होगी। जैसा कि ग्रेग ने उल्लेख किया है, सार्वजनिक प्रत्यय सूची शुरू करने के लिए एक महान जगह है। आइए मान लीजिए कि आपने सूची को suffixes नामक एक अजगर सरणी में पार्स किया है। यदि यह आपके साथ कुछ आरामदायक नहीं है, तो टिप्पणी करें और मैं कुछ कोड जोड़ सकता हूं जो इसे करेगा।

def is_domain(d): 
    for suffix in suffixes: 
     if d.endswith(suffix): 
      # Get the base domain name without suffix 
      base_name = d[0:-(suffix.length + 1)] 
      # If it contains '.', it's a subdomain. 
      if not base_name.contains('.'): 
       return true 
    # If we get here, no matches were found 
    return false 
+0

धन्यवाद! मैं यहां से अपना रास्ता ढूंढ सकता हूं। – Tom

+0

कोई समस्या नहीं! मैं खुशी से मदद कर सकता है। – Benson

+4

अब आप इसके लिए भारी उठाने के लिए एक सरल लेकिन उत्कृष्ट पायथन पैकेज का उपयोग कर सकते हैं: http://pypi.python.org/pypi/publicsuffix –

-3
^[a-zA-Z0-9\-\.]+\.(com|org|net|mil|edu|COM|ORG|NET|MIL|EDU)$ 
+0

संपूर्ण प्रश्न पढ़ें, यह कोई समाधान नहीं है। – You

+0

जैसा कि मैंने अपने प्रश्न में उल्लेख किया है, मुझे नियमित टीएलडी न केवल '.co.uk' या '.edu.hk' जैसी चीजें ढूंढने में सक्षम एक नियमित अभिव्यक्ति की आवश्यकता है। – Tom

+0

"आप", मुझे इसे हराया। – Tom

8

ऐसा लगता है कि आप Public Suffix List प्रोजेक्ट के माध्यम से उपलब्ध जानकारी की तलाश में हैं।

एक "सार्वजनिक प्रत्यय" वह है जिसके तहत इंटरनेट उपयोगकर्ता सीधे नाम पंजीकृत कर सकते हैं। सार्वजनिक प्रत्यय के कुछ उदाहरण ".com", ".co.uk" और "pvt.k12.wy.us" हैं। सार्वजनिक प्रत्यय सूची सभी ज्ञात सार्वजनिक प्रत्यय की एक सूची है।

कोई भी नियमित अभिव्यक्ति नहीं है जो उचित रूप से सार्वजनिक प्रत्यय की सूची से मेल खाती है। आपको सार्वजनिक प्रत्यय सूची का उपयोग करने के लिए कोड को लागू करने की आवश्यकता होगी, या मौजूदा पुस्तकालय ढूंढें जो पहले से ऐसा करता है।

+0

दिलचस्प और शायद बहुत उपयोगी सूची। – You

+1

धन्यवाद, ग्रेग। यह बिल्कुल सही जवाब है। Http://www.dkim-reputation.org/regdom-libs/ – Anirvan

+0

@ अनिरवन पर कई भाषाओं में सार्वजनिक प्रत्यय सूची प्रसंस्करण करने के लिए पुस्तकालय हैं, क्या आप पाइथन के बराबर जानते हैं? आपके द्वारा पोस्ट की गई लाइब्रेरी केवल सी, PHP और पर्ल में उपलब्ध है। – Tom

2

मैं शायद टीएलडी की पूरी सूची प्राप्त करके और रेगेक्स बनाने के लिए इसका उपयोग करके इसे हल कर दूंगा। उदाहरण के लिए (रूबी में, माफ करना, नहीं अभी तक एक Pythonista):

tld_alternation = ['\.com','\.co\.uk','\.eu','\.org',...].join('|') 
regex = /^[a-z0-9]([a-z0-9\-]*[a-z0-9])?(#{tld_alternation})$/i 

मैं इसे ठीक से TLD के के वास्तविक सूची जानने के बिना एक असली दो भाग टीएलडी और एक उप डोमेन के बीच अंतर करना संभव है नहीं लगता है (यानी: यदि आप जानते थे कि रेगेक्स कैसे काम करता है तो आप हमेशा एक सबडोमेन बना सकते हैं।)

संबंधित मुद्दे