LUA 字符串短语匹配

字符串:x11y22z33

我想通过 1 个字符串和 2 个数字使用 string.match 验证上面的值

string.match(s,"/^\s{1}\d{2}\s{1}\d{2}\s{1}\d{2}")

我尝试了,但没有成功

点赞
用户10953006
用户10953006

Lua 有一个特定的语法:

string.match(s,"(%a)(%d%d)(%a)(%d%d)(%a)(%d%d)")

您可以在手册的第 5.4.1模式 中查看:

http://www.lua.org/manual/5.1/manual.html

2021-07-27 09:50:40
用户11740758
用户11740758

同时 string.find() 可以处理模式并给出位置…

(: 表示:数据类型"string"拥有"string"元方法)

do
local str='not important important: x11y22z33 and ignore rest'
local head,tail,a,b,c=str:find('(%a%d%d)(%a%d%d)(%a%d%d)')

print(str:sub(head,tail))

return head,tail,a,b,c
end

(没有错误处理)

… 使用 string.sub() 提取它。

输出和返回结果为…

x11y22z33
26  34  x11 y22 z33

以上示例还展示了当使用 () 时,string.find() 的结果会扩展。

因此,模式 (%a)(%d+)(%a)(%d+)(%a)(%d+) 会生成3个键/值对。

local head,tail,k1,x,k2,y,k3,z=str:find('(%a)(%d+)(%a)(%d+)(%a)(%d+)')
...
return head,tail,k1,x,k2,y,k3,z
-- 输出: 26 34 x 11 y 22 z 33
-- 也适用于 x1024y3000z5
2021-07-27 11:28:23