Разбор строки URL в Ruby - PullRequest
5 голосов
/ 30 июля 2009

У меня есть довольно простая строка, которую я хочу разобрать в ruby ​​и пытаюсь найти самое элегантное решение. Строка имеет формат /xyz/mov/exdaf/daeed.mov?arg1=blabla&arg2=3bla3bla

То, что я хотел бы иметь: строка1: /xyz/mov/exdaf/daeed.mov строка2: arg1 = blabla & arg2 = 3bla3bla

так в принципе токенизировать на?

но не могу найти хороший пример. Любая помощь будет оценена.

Ответы [ 3 ]

10 голосов
/ 30 июля 2009

Я думаю, что лучшим решением было бы использование модуля 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"

В противном случае вы можете захватить регулярное выражение: /^(.*?)\?(.*?)$/. Тогда $1 и $2 - это то, что вы хотите. (URI имеет больше смысла в этом случае.)

10 голосов
/ 30 июля 2009

Разбить начальную строку на вопросительные знаки.

str.split("?")
=> ["/xyz/mov/exdaf/daeed.mov", "arg1=blabla&arg2=3bla3bla"]
6 голосов
/ 30 июля 2009

Похоже, это то, что вы ищете, встроенная функция разделения строк:

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

Редактировать : Ба, чтобы замедлить;)

...