नियमित अभिव्यक्ति आपको यहां थोड़ी मुश्किल हो सकती है, क्योंकि मेजबाननाम असीम जटिल हो सकते हैं - आपके पास एकाधिक सबडोमेन (यानी foo.bar.baz.com), या शीर्ष स्तर डोमेन हो सकता है (टीएलडी) में कई भाग हो सकते हैं (यानी www.baz.co.uk)।
एक जटिल नियमित अभिव्यक्ति के लिए तैयार है? :)
re = /^(?:(?>[a-z0-9-]*\.)+?|)([a-z0-9-]+\.(?>[a-z]*(?>\.[a-z]{2})?))$/i
new_url = o_url.host.gsub(re, '\1').strip
चलिए इसे दो खंडों में तोड़ दें। ^(?:(?>[a-z0-9-]*\.)+?|)
वर्णों के एक या अधिक समूहों से मिलान करके सबडोमेन एकत्र करेगा, इसके बाद एक बिंदु (लालची, ताकि सभी सबडोमेन यहां मेल खाते हों)। कोई सबडोमेन (जैसे foo.com) के मामले में खाली विकल्प की आवश्यकता है। ([a-z0-9-]+\.(?>[a-z]*(?>\.[a-z]{2})?))$
वास्तविक होस्टनाम और टीएलडी एकत्र करेगा। यह या तो एक भाग वाली टीएलडी (जैसे .info, .com या। संग्रहालय), या दो भाग टीएलडी के लिए अनुमति देता है जहां दूसरा भाग दो अक्षर (जैसे .oh.us या .org.uk) है।
मैं निम्नलिखित नमूनों पर इस अभिव्यक्ति का परीक्षण किया:
foo.com => foo.com
www.foo.com => foo.com
bar.foo.com => foo.com
www.foo.ca => foo.ca
www.foo.co.uk => foo.co.uk
a.b.c.d.e.foo.com => foo.com
a.b.c.d.e.foo.co.uk => foo.co.uk
ध्यान दें कि यह regex ठीक से होस्ट नामों है कि दो से अधिक टीएलडी के लिए "भागों" से मेल नहीं होगा!
स्रोत
2009-06-11 20:46:10
उस साइट के बारे में भूल गए, अच्छा जवाब –