我看了一眼,无法在Stack Overflow上找到我需要的内容,并且想知道是否有人有一个简单的解决方案。
我想在URL中找到一个参数并增加其值,因此,举个例子:
?kws=&pstc=&cty=&prvnm=1
我希望能够找到prvnm
参数,无论它在字符串中的位置,并将其值增加1。
我知道我可以将参数拆分成一个数组,找到关键字,增加它并将其写回来,但这看起来很长,并且想知道其他人是否有任何想法!
答案 0 :(得分:3)
require "uri"
url = "http://example.com/?kws=&pstc=&cty=&prvnm=1"
def new_url(url)
uri = URI.parse(url)
hsh = Hash[URI.decode_www_form(uri.query)]
hsh['prvnm'] = hsh['prvnm'].next
uri.query = URI.encode_www_form(hsh).to_s
uri.to_s
end
new_url(url) # => "http://example.com/?kws=&pstc=&cty=&prvnm=2"
答案 1 :(得分:2)
已有四个答案,所以我不得不想出一些不同的东西:
s = "?kws=&pstc=&cty=&prvnm=1"
head, sep, tail = s.partition(/(?<=[?&]prvnm=)\d+/)
head + (sep.to_i + 1).to_s + tail # => "?kws=&pstc=&cty=&prvnm=2"
[head, sep, tail]
,such that head + sep + tail => s
的数组,其中sep
arator是partition
的参数,可以是字符串或者regex
。&prvnm=
后面的数字。因此,我们使用regex
,\d+
前面跟上面我们想要视为零长度的字符串,因此它不会包含在分隔符中。这要求“积极的观察”:(?<=&prvnm=)
。 \d+
是“贪婪的”,因此需要所有相关的数字。s
,head, sep, tail = s.partition(/(?<=&prvnm=)(\d+)/)
=> ["?kws=&pstc=&cty=&prvnm=", "1", ""]
。编辑:我要感谢@quetzalcoatl指出我需要将我的正则表达式中的(?<=&prvnm=)
更改为我现在拥有的内容,因为?prvnm=
在{{1}}开始时我的内容会失败。字符串。
答案 2 :(得分:1)
split the string by `&`
then iterate over the parts
then split each part by `=` and inspect the results
when found `prvnm`, parse the integer and increment it
then join the bits by '='
then join the parts by '&'
或者,使用正则表达式:
/[?&]prvnm=\d+/
并解析结果,然后进行替换。
或者,获取一些URL解析库..
答案 3 :(得分:0)
使用:
require 'uri'
然后:
parsed-url= URI.parse( ur full url)
r = CGI.parse(parsed_url.query)
r
现在是所有查询参数的哈希值。
您可以使用以下方式轻松访问它:
r["prsvn"].to_i + 1
答案 4 :(得分:0)
尝试这样的事情:
params = "?kws=&pstc=&cty=&prvnm=1"
num = params.scan(/prvnm=(\d)/)[0].join.to_i
puts num + 1