#ruby-on-rails #ruby #ruby-on-rails-3
#ruby-on-rails #ruby #ruby-on-rails-3
Вопрос:
Я хочу проанализировать этот URL с помощью ruby, чтобы получить идентификатор 33: http://www.domain.com/?id=33
Как бы мне это сделать?
Ответ №1:
Вы могли бы использовать регулярное выражение, но вам было бы лучше использовать библиотеки, чтобы убедиться, что вы правильно обрабатываете все различные особенности URL:
require 'uri'
require 'cgi'
h = CGI.parse(URI.parse('http://www.domain.com/?id=33').query)
id = h['id'][0].to_i
# You now have the id parameter as a Fixnum
В качестве бонуса это даст вам некоторое представление о стандартных библиотеках.
Комментарии:
1. 1 «это даст вам некоторое представление о стандартных библиотеках» Лучше не изобретать велосипед.
Ответ №2:
Вы могли бы использовать регулярное выражение через match, т.Е.
id = url.match(/.*=(d )/)[1]
где url = «http://www.domain.com/?id=33 «
йен.
Комментарии:
1. Да, этот код устанавливает в переменной ‘id’ только идентификатор. Итак, для вашего примера идентификатор будет равен 33.
2. Как и в ответе @macs, это очень хрупкое и сломается, если позиция параметра изменится.
Ответ №3:
С помощью регулярного выражения типа /d z/
. Вы можете создать такой, используя, например, rubular. Данное выражение извлекает идентификатор при условии, что никакие другие символы не следуют за идентификатором post, а сам идентификатор содержит только цифры.
Комментарии:
1. прохладный… как бы мне извлечь идентификатор в переменную с регулярным выражением?
2. @user730569: с <code>совпадением</code> типа <code>id = url.match(/d z /)[1] и «url» — это ваш URL.
3. и как бы я получил текущий URL?
4. @user730569: Это могло бы помочь.
5. Это решение очень хрупкое. Предполагается, что значение всегда находится в конце URL, однако спецификация URL не требует согласованности в позициях параметров. Анализатор — гораздо лучший выбор.