LUA 字符串短语匹配

Posted

技术标签:

【中文标题】LUA 字符串短语匹配【英文标题】:LUA String phrase match 【发布时间】:2021-10-03 03:25:51 【问题描述】:

字符串:x11y22z33

我想用 1 个字符串和 2 个数字的 string.match 验证上述值

string.match(s,"/^\s1\d2\s1\d2\s1\d2")

我试过了,但是没用

【问题讨论】:

【参考方案1】:

Lua 有一个特定的语法:

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

您可以在5.4.1 – Patterns章节中查看手册

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

【讨论】:

【参考方案2】:

string.find() 也可以处理模式并为您提供位置... (: 表示:数据类型“字符串”有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 
-- Puts out: 26 34 x 11 y 22 z 33
-- And also works with x1024y3000z5

【讨论】:

以上是关于LUA 字符串短语匹配的主要内容,如果未能解决你的问题,请参考以下文章

MySQL MATCH() AGAINST() FULLTEXT Index - 结合短语匹配实现部分字符串匹配

匹配字符串中短语的第一个单词

使用带有 \b 的正则表达式来匹配字符串中的不同短语[重复]

lua 字符匹配

[lua] lua中匹配字符串小数

使用正则表达式匹配 Lua 多行字符串和注释