2016-07-12 18 views
-1

ich mehrere Ersetzungen auf einer Variable zu machen bin versucht, dessen WertIn Schienen, mehrere Substitutionen zu machen versucht, aber nur die erste nimmt

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 

und ich versuche, die Ersetzungen diese Art und Weise zu machen ...

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

aber nach dieser Anweisung den Wert ausgeführt wird, ist

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

Aus irgendeinem Grund die Der erste Teil ersetzt den letzten Teil der URL. Wie behalte ich die gesamte Zeichenfolge und ersetze sie an den Stellen, an denen ich sie angegeben habe?

Antwort

0

Sie vermasselt Ihre Regex. Sollte sein

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

Sie hatten \\ drin. Es gibt keine umgekehrten Schrägstriche im Pfadteil einer URL.

BTW, warum verwenden Sie kein richtig Werkzeug für den Job? Das Parsen von URLs ist ein gelöstes Problem.

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"