2016-09-13 6 views
1

一致する式に問題があります。私は鋸山を使用して抽出されたリンクから「コード」パラメータを抽出したいので、私は試してみました:正規表現パターンを使用してURLからパラメータを抽出する方法

event_id = a.attr("href").match(/\?code=(\d+)/)[1] 

は、残念ながら何を抽出することは、全体のクエリ文字列です:

?code=768140119 

適切な方法は何ですかパラメータの値を取得するだけで何もありませんか?

+0

'a.attr(" href ")[/ \?code =(\ d +)/、1]'を使用すると、あるいは単にa.attr( "href")[/ \ d + /] '(1つ以上の数字のシーケンスが1つしかない場合)? –

+0

また、 'a [" href "] [/ \ d + /]'を試してください –

+0

入力と出力を表示できますか?あなたは本当に試合の[1]にアクセスしていますか? –

答えて

2

正規表現を使用しないでください。十分にテストされたホイールを使用してください。

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"} 

、鋸山はちょうどハッシュのようなノードを扱い、それが容易になります:

require 'nokogiri' 

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

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

attr(...)と入力して時間を浪費する必要はありません。

+0

URLは相対的なものです(例: "../results?code=abcde")。これはまだ相対URLで動作しますか? – Dave

+0

何を試しましたか? "[どのくらいの研究努力がStack Overflowユーザーに期待されていますか?](http://meta.stackoverflow.com/a/261593/128421)"が重要です。 –

関連する問題