2

我有一些链接在Luamagnet中作为字符串提交。这些磁铁通常具有以下格式:

magnet:?xt=<hashing>&xl=<size>&dn=<name>

但随着客户的不同,磁铁也可以生成为:

magnet:?xl=<size>&xt=<hashing>&dn=<name>

从这种类型的字符串中,我想在xl=(纯数字)之后获取数据,之后xt=%wand :%w字母数字匹配在哪里)组成。

目前我正在使用两个单独的语句来获取这些值。这可以在单个语句中实现string.find()吗?

sInput = "magnet:?xt=urn:tree:tiger:ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABC&xl=1234567890123456789&dn=This+Is+The+Name+Of+File.EXT"
local _, _, sHash = sInput:find( "xt=([%w%:]+)" )
local _, _, iSize = sInput:find( "xl=(%d+)" )
4

1 回答 1

2

我认为你最好将所有值收集到一个表中:

local sInput="magnet:?xt=<hashing>&xl=<size>&dn=<name>"
local s=sInput:match("%?(.*)$").."&"
local t={}
for k,v in s:gmatch("(%w+)=(.-)&") do
        t[k]=v
end

如果您想限制以开头的键,请x使用gmatch("(x%w+)=(.-)&"). 如果您知道这一点xt并且xl永远不是列表中的最后一项,您可以简单地执行以下操作:

for k,v in sInput:gmatch("(x%w+)=(.-)&") do
于 2012-10-01T13:48:27.533 回答