如何使用正则表达式模式从URL中提取参数

时间:2016-09-13 20:46:17

标签: ruby-on-rails ruby regex nokogiri

我遇到匹配表达式的问题。我想从我使用Nokogiri提取的链接中提取“code”参数,所以我尝试了:

?code=768140119

不幸的是,提取的是整个查询字符串:

{{1}}

获取参数值的正确方法是什么?

1 个答案:

答案 0 :(得分:3)

不要使用正则表达式,使用经过良好测试的轮子。

Ruby的URI课程是您的朋友,特别是decode_www_form

require 'uri'

uri = URI.parse('http://foo.com?code=768140119')
uri.query # => "code=768140119"
URI.decode_www_form(uri.query) # => [["code", "768140119"]]
URI.decode_www_form(uri.query).to_h # => {"code"=>"768140119"}

至于提取标签参数的值,Nokogiri让它变得简单,只需将节点视为散列:

require 'nokogiri'

doc = Nokogiri::HTML("
<html>
  <body>
    <a href='path/to/foo'>bar</a>
  </body>
</html>
")

doc.at('a')['href'] # => "path/to/foo"

您无需浪费时间输入attr(...)