рубин встроенный в URI классе есть все необходимое, чтобы правильно разобрать, расщепленные и декодировать URL-адреса:
require 'uri'
uri = URI.parse('/shows/the-ruby-book/meta-programming/?play=5b35a825-d372-4375-b2f0-f641a38067db')
URI::decode_www_form(uri.query).to_h['play'] # => "5b35a825-d372-4375-b2f0-f641a38067db"
Если вы используете старше рубин, который не поддерживает to_h
, использование:
Hash[URI::decode_www_form(uri.query)]['play'] # => "5b35a825-d372-4375-b2f0-f641a38067db"
Вы должны использовать URI, г а не пытаться разделить/извлечь с помощью регулярного выражения, потому что запрос URI будет закодирован, если любые значения не находятся в пределах символов, разрешенных спецификацией. URI или Addressable::URI, будут декодировать их обратно до их первоначальных значений.
Обратите внимание, что иногда вы будете пропускать ответы с лучшими решениями из-за ненужных ограничений, связанных с проблемой. В этом случае используется регулярное выражение. Другими словами, ваш вопрос - проблема XY. – sawa
Видите? (См. Ответ spickermann) – sawa
Не используйте для этого регулярные выражения. Используйте существующие инструменты, такие как URI или Addressable :: URI. –