2012-11-06 5 views
7

कहो मैं इस तरह एक स्ट्रिंग है निकालने के लिए: "http://something.example.com/directory/"कैसे एक यूआरएल को पार्स करने और आवश्यक सबस्ट्रिंग

मुझे क्या करना चाहते हैं तो इस स्ट्रिंग पार्स, और स्ट्रिंग से "something" को निकालने के लिए है।

पहला कदम, यह सुनिश्चित करने के लिए स्पष्ट रूप से जांचना है कि स्ट्रिंग में "http://" है - अन्यथा, इसे स्ट्रिंग को अनदेखा करना चाहिए।

लेकिन, फिर मैं उस स्ट्रिंग में "something" कैसे निकालूं? मान लें कि इसका मूल्यांकन करने वाले सभी तारों की एक समान संरचना होगी (यानी मैं यूआरएल के सबडोमेन निकालने की कोशिश कर रहा हूं - यदि स्ट्रिंग की जांच की जा रही है तो वास्तव में एक वैध यूआरएल है - जहां वैध "http://" के साथ शुरू होता है)।

धन्यवाद।

पीएस मुझे पता है कि पहले भाग को कैसे जांचें, यानी मैं केवल "http://" पर स्ट्रिंग को विभाजित कर सकता हूं लेकिन यह पूरी समस्या का समाधान नहीं करता है क्योंकि इससे "http://something.example.com/directory/" उत्पन्न होगा। मैं चाहता हूं कि "something" है, और कुछ नहीं।

+0

http://www.regular-expressions.info/ruby.html – durron597

+1

@ durron597: रेगेक्सन के साथ सबकुछ हथियार न लें। यूआरएल एक अच्छी तरह से परिभाषित वस्तु है, रूबी मानक पुस्तकालय और लाख अन्य रत्नों में लाखों बार इलाज किया जाता है। अगर मैं एक विशेषज्ञ था, तो मैं जवाब दूंगा। –

+0

सभी डाउनवॉट्स के साथ क्या है? इसे मत समझो – marcamillion

उत्तर

18

मैं इसे इस तरह से करना चाहते हैं। यह सबसे पूर्ण फीचर्ड नहीं है लेकिन यह अधिकांश यूआरएल के लिए यह काम करने में काफी सक्षम है। यदि आपके पास IRIs है तो Addressable::URI देखें।

+0

मुझे यह पसंद है। अच्छा, सुरुचिपूर्ण और महंगा नहीं है। धन्यवाद! – marcamillion

+1

और हमें किसी भी regex को बनाए रखने की आवश्यकता नहीं है। –

+0

हाँ ... बस जो मैं खोज रहा था। धन्यवाद मेन्ग !!! – marcamillion

2

अच्छा, आप नियमित अभिव्यक्तियों का उपयोग कर सकते हैं। कुछ /http:\/\/([^\.]+)/ जैसा है, यानी, '' 'का पहला समूह है। http के बाद पत्र। http://rubular.com/ की जाँच करें, आप परीक्षण भी का एक सेट के खिलाफ अपने रेगुलर एक्सप्रेशन के परीक्षण कर सकते हैं, यह इस उपकरण :)

+1

मैंने इसे करने से शुरू कर दिया, लेकिन यह बहुत जल्दी गन्दा हो गया। – marcamillion

6

आप यूआरआई तरह

uri = URI.parse("http://something.example.com/directory/") 
puts uri.host 
# "something.example.com" 

इस्तेमाल कर सकते हैं सीखने के लिए बहुत अच्छा है और आप तो बस पर काम कर सके मेज़बान।
या वहां से Remove subdomain from string in ruby

require 'rubygems' 
require 'domainatrix' 

url = Domainatrix.parse("http://foo.bar.pauldix.co.uk/asdf.html?q=arg") 
url.public_suffix  # => "co.uk" 
url.domain    # => "pauldix" 
url.subdomain   # => "foo.bar" 
url.path    # => "/asdf.html?q=arg" 
url.canonical   # => "uk.co.pauldix.bar.foo/asdf.html?q=arg" 

एक रत्न domainatrix है और तुम सिर्फ उपडोमेन लग सकता है।

require 'uri' 

uri = URI.parse('http://something.example.com/directory/') 
uri.host.split('.').first 
=> "something" 

URI रूबी में बनाया गया है:

+0

मुझे लगता है कि यह किसी भी ऐसे व्यक्ति के लिए एक अच्छा समग्र समाधान है जो सभी प्रकार के यूआरएल को पार्स करना चाहता है। मेरे मामले में, हालांकि, मुझे केवल यूआरएल के एक विशिष्ट प्रारूप को पार्स करने की जरूरत है - जो 'foo.bar/somedir' है। – marcamillion

+0

@marcamillion यही कारण है कि मैंने आपको पहला विकल्प भी दिया, जो टिन मैन ने उत्तर दिया था। – oldergod

+0

@oldergod: उस dominatrix कितनी अच्छी तरह से बनाए रखा है? क्या यह परिपक्व है? –

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