Как бы мне проанализировать этот URL, чтобы получить идентификатор?

#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 не требует согласованности в позициях параметров. Анализатор — гораздо лучший выбор.