2009-07-30 14 views
5

में पार्सिंग यूआरएल स्ट्रिंग मेरे पास एक बहुत ही सरल स्ट्रिंग है जो मैं रूबी में पार्स करना चाहता हूं और सबसे सुरुचिपूर्ण समाधान खोजने की कोशिश कर रहा हूं। स्ट्रिंग स्वरूप की है /xyz/mov/exdaf/daeed.mov?arg1=blabla & ARG2 = 3bla3blaरुबी

क्या मैं करना चाहते हैं यह है: string1: /xyz/mov/exdaf/daeed.mov स्ट्रिंग 2: arg1 = blabla & arg2 = 3bla3bla

तो मूल रूप से टोकनोज़ पर?

लेकिन एक अच्छा उदाहरण नहीं मिल रहा है। किसी भी मदद की सराहना की जाएगी।

उत्तर

10

प्रश्न चिह्नों पर प्रारंभिक स्ट्रिंग को विभाजित करें।

str.split("?") 
=> ["/xyz/mov/exdaf/daeed.mov", "arg1=blabla&arg2=3bla3bla"] 
+3

पहले से ही एक यूआरएल पार्सिंग लाइब्रेरी है जो इनपुट हमेशा एक यूआरएल है तो बेहतर विकल्प होगा। –

6

यह आप के लिए क्या देख प्रतीत हो रहा है, तार में निर्मित विभाजन समारोह:

"abc?def".split("?") => ["abc", "def"] 

संपादित: बाह, धीमा करने के लिए;)

10

मुझे लगता है कि सबसे अच्छा समाधान होगा URI मॉड्यूल का उपयोग करने के लिए। (आप ? के अधिकार के लिए हिस्सा पाने के लिए URI.parse('your_uri_string').query जैसे काम कर सकें।) देखें http://www.ruby-doc.org/stdlib/libdoc/uri/rdoc/

उदाहरण:

002:0> require 'uri' # or even 'net/http' 
true 
003:0> URI 
URI 
004:0> URI.parse('/xyz/mov/exdaf/daeed.mov?arg1=bla&arg2=asdf') 
#<URI::Generic:0xb7c0a190 URL:/xyz/mov/exdaf/daeed.mov?arg1=bla&arg2=asdf> 
005:0> URI.parse('/xyz/mov/exdaf/daeed.mov?arg1=bla&arg2=asdf').query 
"arg1=bla&arg2=asdf" 
006:0> URI.parse('/xyz/mov/exdaf/daeed.mov?arg1=bla&arg2=asdf').path 
"/xyz/mov/exdaf/daeed.mov" 

अन्यथा, आप एक regex पर कब्जा कर सकते हैं: /^(.*?)\?(.*?)$/। फिर $1 और $2 आप जो चाहते हैं वो हैं। (URI हालांकि इस मामले में अधिक समझ में आता है।)

+0

आपको केवल 'नेट/http' –

+0

गुड प्वाइंट के बजाय 'uri' की आवश्यकता हो सकती है; मैं हमेशा इसके बारे में भूल जाता हूं क्योंकि मैं आमतौर पर यूआरआई को पार्स करने के बाद कुछ सही डाउनलोड करता हूं। –