2014-11-30 3 views
0

Я хочу получить ASIA из следующего образца.рубин regex для после точной строки

/scripts/skw.asp?term=&department=ASIA 

Знаете ли вы, как я могу извлечь значение отдела из всего текста.

+0

Возможные дубликаты: [здесь] (https://stackoverflow.com/questions/7316656/how-to-get-query-string-from-passed-url-in-ruby-on-rails) и [ здесь] (https://stackoverflow.com/questions/2500462/how-to-extract-url-parameters-from-a-url-with-ruby-or-rails). – user4235730

ответ

1
string = "/scripts/skw.asp?term=&department=ASIA&a=b"  
puts string[/department=(\w+)/, 1] # => "ASIA" 

или вы можете разобрать это как запрос (который, на мой взгляд более уместно):

require 'cgi' 

string = "/scripts/skw.asp?term=&department=ASIA&a=b" 
query  = string.split('?')[1] # => "term=&department=ASIA&a=b" 
parsed_query = CGI::parse(query) # => {"term"=>[""], "department"=>["ASIA"], "a"=>["b"]} 
puts parsed_query['department'][0] # => "ASIA" 
+0

Это не сработает, если в отделе содержится символ без слова, например, пространство с кодировкой URL, т. Е. '& Department = Customer% 20Service'. –

+0

'/ department = (. +) &? /' –

0
str = '/scripts/skw.asp?term=&department=ASIA' 

Вы можете использовать захват группы:

str[/\bdepartment=(.+$)/, 1] 
    #=> "ASIA" 

или положительный lookbehind:

str[/(?<=\bdepartment=).+$/] 
    #=> "ASIA" 
+0

Хотя это интересный подход, оба решения возвращают неверный результат, если в конце будет другой параметр или если вы просто переключите позиции 'term' и' department' в существующей строке, подобной этой '/scripts/skw.asp? department = ASIA & term =' –

+0

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

+0

Я не думаю, что '\ W' делает то, что вы думаете. Возможно, у вас был '\ b'. – pguardiario

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