我有一个URL编码的字符串:
a = "%5B%22552A8619-6ECA-4A95-A798-C1E2CE75BFFF%22%2C%2264c19b5b2d0257ddb382dbd3660de3fd%22%2C%22share%22%5D"
如果我对此字符串进行URL解码,那么它将如下所示:
"[\"552A8619-6ECA-4A95-A798-C1E2CE75BFFF\",\"64c19b5b2d0257ddb382dbd3660de3fd\",\"share\"]"
从这个字符串我想得到这个数组:
["552A8619-6ECA-4A95-A798-C1E2CE75BFFF","64c19b5b2d0257ddb382dbd3660de3fd","share"]
如果没有讨厌的字符串替换怎么做?
答案 0 :(得分:3)
该字符串是使用JSON编码的数组:
require 'cgi' require 'json' a = "%5B%22552A8619-6ECA-4A95-A798-C1E2CE75BFFF%22%2C%2264c19b5b2d0257ddb382dbd3660de3fd%22%2C%22share%22%5D" JSON[CGI::unescape(a)] [ [0] "552A8619-6ECA-4A95-A798-C1E2CE75BFFF", [1] "64c19b5b2d0257ddb382dbd3660de3fd", [2] "share" ]
JSON[CGI::unescape(a)].last
将返回"share"
,让您回家免费。
CGI::escape
用于删除编码,将其转换回“正常”JSON编码数组。
JSON[]
(AKA JSON.parse
)将它从JSON表示法转换回Ruby数组。
答案 1 :(得分:3)
the_given_string.scan(/"(.*?)"/).flatten
答案 2 :(得分:2)
您可以删除字符并拆分或评估它:
"[\"A798-C1E2CE75BFFF\",\"643fd\",\"share\"]".delete('\"[]').split(',')
# => ["A798-C1E2CE75BFFF", "643fd", "share"]
eval "[\"A798-C1E2CE75BFFF\",\"643fd\",\"share\"]"
# => ["A798-C1E2CE75BFFF", "643fd", "share"]
答案 3 :(得分:1)
你可以eval
字符串:
require 'cgi'
a = "%5B%22552A8619-6ECA-4A95-A798-C1E2CE75BFFF%22%2C%2264c19b5b2d0257ddb382dbd3660de3fd%22%2C%22share%22%5D"
x = eval( CGI.unescape(a))
p x #["552A8619-6ECA-4A95-A798-C1E2CE75BFFF", "64c19b5b2d0257ddb382dbd3660de3fd", "share"]
但是eval是邪恶的。
您可以使用,您所谓的讨厌的字符串替换:
p CGI.unescape(a).gsub(/\A\["|"\]\Z/,'').split(/","/)
或者您可以尝试JSON
:
require 'cgi'
require 'json'
a = "%5B%22552A8619-6ECA-4A95-A798-C1E2CE75BFFF%22%2C%2264c19b5b2d0257ddb382dbd3660de3fd%22%2C%22share%22%5D"
x = JSON.load( CGI.unescape(a))