我想用正則表達式將'hoge'替換爲'foo'。但用戶的價值是動態的,所以我不能使用str.gsub('hoge', 'foo')
。如何使用捕獲的正則表達式替換URL中的字符串
str = '?user=hoge&tab=fuga'
我該怎麼辦?
我想用正則表達式將'hoge'替換爲'foo'。但用戶的價值是動態的,所以我不能使用str.gsub('hoge', 'foo')
。如何使用捕獲的正則表達式替換URL中的字符串
str = '?user=hoge&tab=fuga'
我該怎麼辦?
在使用.gsub
來替換它的任何值之前,您可能想要先查明用戶查詢映射的內容。
首先,使用the URI module將URL字符串解析爲URI對象。然後,您可以使用CGI查詢方法使用the CGI module從URI對象中獲取查詢參數的鍵值對。最後,您可以在該散列值中刪除.gsub
。
爲什麼同時使用URI和CGI?如果使用URI和CGI,爲什麼要使用'gsub'? –
@TheTinMan似乎OP想要改變原來的參數值。非常具體的問大聲笑 – Xenyal
不要用正則表達式做到這一點。
這是如何使用現有的車輪操縱的URI:
require 'uri'
str = 'http://example.com?user=hoge&tab=fuga'
uri = URI.parse(str)
query = URI.decode_www_form(uri.query).to_h # => {"user"=>"hoge", "tab"=>"fuga"}
query['user'] = 'foo'
uri.query = URI.encode_www_form(query)
uri.to_s # => "http://example.com?user=foo&tab=fuga"
或者:
require 'addressable'
uri = Addressable::URI.parse('http://example.com?tab=fuga&user=hoge')
query = uri.query_values # => {"tab"=>"fuga", "user"=>"hoge"}
query['user'] = 'foo'
uri.query_values = query
uri.to_s # => "http://example.com?tab=fuga&user=foo"
注意,在例子中參數的順序改變,但代碼處理的差異不問題。
您想使用URI或Addressable的原因是因爲參數和值在包含非法字符時必須正確編碼。 URI和Addressable知道規則並且會遵循它們,而天真的代碼假定不用擔心編碼,導致破壞的URI。
URI是Ruby標準庫的一部分,而且Addressable功能更加全面。拿你的選擇。
你的問題是一個XY問題。你問的是Y,但需要詢問X,這將是「我如何使用參數來操作URL」。 –
我第一次聽到'XY問題'。我學到了一些新東西。謝謝。 – faara