【问题标题】:How to extract data for non-fixed string如何提取非固定字符串的数据
【发布时间】:2012-09-22 08:39:09
【问题描述】:

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

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

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

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

从这种类型的字符串中,我想获取 xl=(纯数字)和 xt= 之后的数据,其中包含%w:(其中%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+)" )

【问题讨论】:

    标签: lua pattern-matching design-patterns string-matching


    【解决方案1】:

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

    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+)=(.-)&amp;")。如果您知道 xtxl 绝不是列表中的最后一项,您可以这样做:

    for k,v in sInput:gmatch("(x%w+)=(.-)&") do
    

    【讨论】:

    • 谢谢。 :) 你在 Lua 方面很棒。 :)
    • 仅供参考:他是 Lua 的作者之一 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-27
    • 2021-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多