2014-08-31 4 views
1

я пытаюсь получить значение «маркера» из этого URLКак получить конкретное значение из URL в рубине на рельсах

маркер = EC-6HV41821M6960550G

url = "https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-6HV41821M6960550G" 

я знаю, что это может быть сделанные с помощью регулярных выражений, но я думаю, что это может быть сделано с помощью некоторого метода URI.

+0

Я пытался сделать это полужирным шрифтом :-) удалил его – Prem

+0

Посмотрите на класс 'URI'. Вы не можете сделать это за один шаг. Вы должны объединить несколько. – sawa

ответ

4

Do можно получить так:

require 'uri' 

url = "https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-xxx" 

uri = URI.parse(url) 
params = CGI::parse(uri.query) 

params['token'] # => 'EC-xxx' 
+0

Thanx это действительно сработало !! вы спасли меня от множества регулярных выражений .. – Prem

0
require 'cgi' 

url = 'https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-6HV41821M6960550G' 

CGI.parse(url)['token'] 
+0

+1 для короткой версии ... – Prem

+1

-1 работает только для параметра 'token', но не сработает для' cmd'. – spickermann

+0

Да, потому что 'CGI.parse' работает только с запросом и анализирует его как split by' & ', а затем' = ', поэтому вместо параметра' cmd' вы будете иметь 'https: //www.sandbox.paypal .com/CGI-BIN/webscr? cmd' – IS04

2

Просто, чтобы показать некоторые другие способы существуют: -

#!/usr/bin/env ruby 

require 'uri' 

url = "https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-xxx" 
uri = URI(url) 
URI.decode_www_form(uri.query).to_h['token'] 
# => "EC-xxx" 

Прочитайте метод ::decode_www_form docomentation.

Смежные вопросы