2009-07-30 13 views
5

Mam dość prosty ciąg, który chcę przeanalizować w rubinie i spróbować znaleźć najbardziej eleganckie rozwiązanie. Ciąg jest formatu /xyz/mov/exdaf/daeed.mov?arg1=blabla & arg2 = 3bla3blaParsowanie ciągów URL w Ruby

Co chciałbym mieć to: łańcuch1: /xyz/mov/exdaf/daeed.mov string2: arg1 = blabla & arg2 = 3bla3bla

tak w zasadzie tokenise?

, ale nie można znaleźć dobrego przykładu. Każda pomoc będzie doceniona.

Odpowiedz

10

Podziel początkowy ciąg znaków zapytania.

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

Istnieje już biblioteka analizy adresów URL, która prawdopodobnie byłaby lepszym wyborem, jeśli dane wejściowe są zawsze adresem URL. –

6

To wydaje się być to, czego szukacie, struny wbudowaną podziału funkcji:

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

Edit: Bah, aby zwolnić;)

10

Myślę, że najlepszym rozwiązaniem byłoby należy użyć modułu URI. (Można robić takie rzeczy jak URI.parse('your_uri_string').query dostać części do prawej strony ?.) Zobacz http://www.ruby-doc.org/stdlib/libdoc/uri/rdoc/

Przykład:

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" 

W przeciwnym razie, można uchwycić na regex: /^(.*?)\?(.*?)$/. W takim razie są to: $1 i $2. (URI ma więcej sensu w tym przypadku).

+0

Możesz po prostu wymagać "uri" zamiast "net/http" –

+0

Dobra rada; Zawsze o tym zapominam, ponieważ zazwyczaj pobierałem coś zaraz po przeanalizowaniu identyfikatora URI. –

Powiązane problemy