【发布时间】:2022-01-24 06:02:20
【问题描述】:
首先这不匹配ok or capture"ok".find("(ok|capture)") -- nil
其次,ok 匹配一个可选的ok;args 但只捕获args 作为参数。这是错误的"ok;args".find("(ok)(;.+)?"),捕获组包含额外的;。
function mymatch(str)
local _, _, ok, oreveal = str:find("(ok)")
return ok, oreveal
end
-- this is what I want
print(mymatch("ok")) -- ok nil
print(mymatch("cancel")) -- cancel nil
print(mymatch("ok;domatch")) -- ok domatch
print(mymatch("okdontmatch")) -- nil nil
【问题讨论】:
-
ok(?:;(.+))?? -
Lua 模式不是正则表达式,例如缺少交替运算符证明了这一点。所以你不能在 Lua 模式中的模式本身中使用 match this or that 逻辑。
-
不,如果没有惯用的解决方案,我可以删除
cancel并匹配ok,但可选参数会很好。 -
"ok".find("(ok|capture)")和"ok;args".find("(ok)(;.+)?")是无效的语法。 string.find 也不会返回 4 个值,只有一次捕获,因此在local _, _, ok, oreveal = str:find("(ok)")oreveal将始终为nil。
标签: lua lua-patterns