Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 在Lua中找到模式的第一个实例,并将其从字符串中删除_String_Lua_String Formatting_Lua Patterns - Fatal编程技术网

String 在Lua中找到模式的第一个实例,并将其从字符串中删除

String 在Lua中找到模式的第一个实例,并将其从字符串中删除,string,lua,string-formatting,lua-patterns,String,Lua,String Formatting,Lua Patterns,我得到以下格式的字符串: abc:321,cba:doodoo,hello:world,eat:mysh0rts 我想从字符串中获取数据配对的一个实例,并将其从字符串中删除,因此,例如,如果我想获取以下值hello:world,我希望这样做: local helloValue, remainingString = GetValue("hello") 对于hellovalue和abc:321,cba:doodoo,eat:mysh0rts的remainingString,它将返回world 我

我得到以下格式的字符串:

abc:321,cba:doodoo,hello:world,eat:mysh0rts
我想从字符串中获取数据配对的一个实例,并将其从字符串中删除,因此,例如,如果我想获取以下值
hello:world
,我希望这样做:

local helloValue, remainingString = GetValue("hello")
对于
hellovalue
abc:321,cba:doodoo,eat:mysh0rts
remainingString
,它将返回
world

我用循环做这件事相当麻烦,有什么更好的方法

(hello:[^,]+,)
只需用
空字符串替换即可。替换数据和
$1
就是您想要的。请参阅演示

这是一种方法:

local str = 'abc:321,cba:doodoo,hello:world,eat:mysh0rts'

local t = {}
for k, v in str:gmatch('(%w+):(%w+)') do
    if k ~= 'hello' then
        table.insert(t, k .. ':' .. v)
    else
        helloValue = v
    end
end

remainingString = table.concat(t, ',')
print(helloValue, remainingString)
您可以自己将其转换为更通用的
GetValue
函数。

也可以尝试以下操作:

local str = 'abc:321,cba:doodoo,hello:world,eat:mysh0rts'

function GetValue(s,k)
    local p=k..":([^,]+),?"
    local a=s:match(p)
    local b=s:gsub(p,"")
    return a,b
end

print(GetValue(str,"hello"))
print(GetValue(str,"eat"))
如果要将整个字符串解析为键值对,请尝试以下操作:

for k,v in str:gmatch("(.-):([^,]+),?") do
    print(k,v)
end

最好显示您正在做什么,以便我们知道如何改进。如果输入是
abc:321,cba:doodoo,eat:mysh0rts,hello:world
,那么您的预期输出是什么?问题被错误地标记为regex,Lua模式不是正则表达式,所以这不起作用。