2016-07-12 29 views
-1

我努力讓自己在一個變量,其值多重替換爲在軌道,努力使多個換人,但只有第一個走

https://api.mydomein.com/events/EVENTID/profiles?max=10&total=1&appid=1234f5bf9f36bc4a1dc8fce2&token=9997aa817ff66b96f3956835f17941e1&search=4001&func=na&parms=%7B%22browser%22%3Afalse%7D&settings=%7B%22setWait%22%3Afalse%7D&_=1468271558064 

,我試圖使替代這種方式...

object_desc_link = OBJECT_DESC_LINK_TEMPLATE.sub(%r{events\/([^\\])+}, "events/#{@event_id}") 
         .sub(%r{appid=([^\&])+}, "appid=#{@app_id}") 
         .sub(%r{token=([^\&])+}, "token=#{@token}") 
         .sub(%r{search=([^\&])+}, "search=#{i}") 

但畢竟這語句運行值

https://api.mydomein.com/events/EVENTID 

出於某種原因,第一個替換是切斷URL的最後部分。如何保留整個字符串並在我指定的地方進行替換?

回答

0

你搞砸了你的正則表達式。應該是

%r{events/([^/])+} 

你在那裏有\\。網址的路徑部分沒有反斜槓。

順便說一句,爲什麼你不使用正確工具的工作?解析網址是一個解決的問題。

s = 'https://api.mydomein.com/events/EVENTID/profiles?max=10&total=1&appid=1234f5bf9f36bc4a1dc8fce2&token=9997aa817ff66b96f3956835f17941e1&search=4001&func=na&parms=%7B%22browser%22%3Afalse%7D&settings=%7B%22setWait%22%3Afalse%7D&_=1468271558064' 

require "addressable/uri" 
uri = Addressable::URI.parse(s) 
h = uri.query_values # => {"max"=>"10", "total"=>"1", "appid"=>"1234f5bf9f36bc4a1dc8fce2", "token"=>"9997aa817ff66b96f3956835f17941e1", "search"=>"4001", "func"=>"na", "parms"=>"{\"browser\":false}", "settings"=>"{\"setWait\":false}", "_"=>"1468271558064"} 

h['appid'] = 'whatever' 
uri.query_values = h 
uri.path = uri.path.sub('EVENTID', '42') 

uri.to_s # => "https://api.mydomein.com/events/42/profiles?_=1468271558064&appid=whatever&func=na&max=10&parms=%7B%22browser%22%3Afalse%7D&search=4001&settings=%7B%22setWait%22%3Afalse%7D&token=9997aa817ff66b96f3956835f17941e1&total=1" 
相關問題