0

谢谢你的时间!

我得到一个字符串,看起来像这样:

web_custom_request("pricing_approval",
    "URL=http://loanoriginationci:8080/ro-web/service/pricing/task/list/pricing_approval?uniqueId=1362015883531",
    "Method=GET",
    "Resource=0",
    "RecContentType=text/xml",
    "Referer=http://loanoriginationci:8080/MAUIWeb/MAUIShell.swf/[[DYNAMIC]]/6",
    "Snapshot=t76.inf",
    "Mode=HTTP",
    LAST);

我想获取这个函数字符串的参数,并将它们存储在不同的变量中。然后我想到的是把这个字符串分成string.split(","),然后得到它的每个部分。

但是如果参数里面有逗号,说这个"Body=xxxx,xxxx",上面的方法就错了。

那么有没有一些优雅而整洁的方法来处理它呢?再次感谢!

4

2 回答 2

1

您可以使用参数来做到这一点。下面的示例返回一个hash,其键是局部变量名称,值是方法调用中传递的值。

def web_custom_request(a,b,c,d,e,f,g,h,i)
  Hash[*method(__method__).parameters.map { |arg| arg[1] }.map { |arg| [arg.to_s, "#{eval arg.to_s}"] }.flatten]
end

h = web_custom_request("pricing_approval",
                       "URL=http://loanoriginationci:8080/ro-web/service/pricing/task/list/pricing_approval?uniqueId=1362015883531",
                       "Method=GET",
                       "Resource=0",
                       "RecContentType=text/xml",
                       "Referer=http://loanoriginationci:8080/MAUIWeb/MAUIShell.swf/[[DYNAMIC]]/6",
                       "Snapshot=t76.inf",
                       "Mode=HTTP",
                       "LAST");

puts h # {"a"=>"pricing_approval", "b"=>"URL=http://loanoriginationci:8080/ro-web/service/pricing/task/list/pricing_approval?uniqueId=1362015883531", "c"=>"Method=GET", "d"=>"Resource=0", "e"=>"RecContentType=text/xml", "f"=>"Referer=http://loanoriginationci:8080/MAUIWeb/MAUIShell.swf/[[DYNAMIC]]/6", "g"=>"Snapshot=t76.inf", "h"=>"Mode=HTTP", "i"=>"LAST"}
于 2013-02-28T06:40:32.377 回答
0

我认为这取决于您的字符串的格式。

如果如您在上面给出的那样,那么 using string.split(不指定分隔符)将起作用,因为它将拆分字符串,在您的情况下,空格自然落在不同的“参数”之间。

如果您的字符串中根本没有间距,例如:

string = 'web_custom_request("pricing_approval","Method=GET","Body=xxxx,xxxx")'

那么您可以使用正则表达式来查找引号之间的部分,例如string.scan(/"([^"]*)"/)

这给出了以下匹配组:

[["pricing_approval"], ["Method=GET"], ["Body=xxxx,xxxx"]]
于 2013-02-28T04:34:41.933 回答