0

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"]

厄介な文字列置換なしでそれを行う方法は?

4

4 に答える 4

3

The string is an array encoded using 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 will return "share", putting you home free.

CGI::escape is used to remove the encoding, which turns it back to a "normal" JSON-encoded array.

JSON[] (AKA JSON.parse) converts it from the JSON notation back to a Ruby array.

于 2013-01-22T22:45:22.490 に答える
3
the_given_string.scan(/"(.*?)"/).flatten
于 2013-01-22T22:49:00.817 に答える
2

文字を削除して分割するか、評価することができます。

"[\"A798-C1E2CE75BFFF\",\"643fd\",\"share\"]".delete('\"[]').split(',')
# => ["A798-C1E2CE75BFFF", "643fd", "share"]

eval "[\"A798-C1E2CE75BFFF\",\"643fd\",\"share\"]"
# => ["A798-C1E2CE75BFFF", "643fd", "share"]
于 2013-01-22T22:39:25.777 に答える
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"]

しかし、評価は悪です。

あなたが厄介な文字列置換と呼ぶものを使用することができます:

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))
于 2013-01-22T22:44:22.530 に答える