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
Lua中的n位模式匹配_Lua_Pattern Matching - Fatal编程技术网

Lua中的n位模式匹配

Lua中的n位模式匹配,lua,pattern-matching,Lua,Pattern Matching,我是卢阿的新手 假设我有一个字符串“1234567890” 我想迭代所有可能的3位数。(即12323434456…) 但这给了我输出123456789 我应该使用什么样的模式 第二,一个相关的问题,我如何指定一个3位数的数字“%3d”似乎不起作用。“%d%d%d”是唯一的方法吗 注意:这没有标记为正则表达式,因为Lua没有RegExp。(至少在本地) 提前感谢:) 更新:正如Amber指出的,Lua中没有“重叠”匹配。关于第二个查询,我现在只能使用string.rep(“%d”,n),因为Lua

我是卢阿的新手

假设我有一个字符串“1234567890”

我想迭代所有可能的3位数。(即12323434456…)

但这给了我输出
123456789

我应该使用什么样的模式

第二,一个相关的问题,我如何指定一个
3位数的
数字<代码>“%3d”似乎不起作用。
“%d%d%d”
是唯一的方法吗

注意:这没有标记为
正则表达式,因为Lua没有RegExp。(至少在本地)

提前感谢:)


更新:正如Amber指出的,Lua中没有“重叠”匹配。关于第二个查询,我现在只能使用
string.rep(“%d”,n)
,因为Lua不支持固定的重复次数。

gmatch
从不返回重叠匹配(并且
gsub
从不替换重叠匹配,fwiw)

您最好的选择可能是遍历所有可能的长度为3的子字符串,检查每个子字符串是否与3位数的模式匹配,如果匹配,则对其进行操作


(是的,
%d%d
是编写它的唯一方法。Lua的缩写模式支持没有固定数量的重复语法。)

核心Lua不包含完整的正则表达式,这是正确的。
string
模块所理解的模式比较简单,但对于很多情况来说已经足够了。不幸的是,匹配重叠的n位数并不是其中之一

也就是说,您可以手动迭代字符串的长度,并尝试在每个位置进行匹配,因为
string.match
函数采用起始索引。例如:

s = "1234567890" for i=1,#s do m = s:match("%d%d%d", i) if m then print(m) end end s=“1234567890” 对于i=1,我们就这样做 m=s:匹配(“%d%d%d”,i) 如果是m,则打印(m)结束 结束 这将产生以下输出:

C:>Lua Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio > s = "1234567890" > for i=1,#s do >> m = s:match("%d%d%d", i) >> if m then print(m) end >> end 123 234 345 456 567 678 789 890 > C:>Lua Lua 5.1.4版权所有(C)1994-2008 Lua.org,临市局里约 >s=“1234567890” >对于i=1,我们就这样做 >>m=s:匹配(“%d%d%d”,i) >>如果是m,则打印(m)结束 >>结束 123 234 345 456 567 678 789 890 >
谢谢你,真不幸!你知道更简单的n位数模式吗?:)嘿,正如我编辑我的答案所提到的,Lua过于简单的模式匹配没有更简单的语法。我已经这样做了…:)但我想也许我应该选择一个更“Lua-ish”的解决方案。:)
(“%d”):rep(n)
是编写对
string.rep的调用的更惯用的方法。这是因为默认情况下,
string
是所有字符串值的元表。 C:>Lua Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio > s = "1234567890" > for i=1,#s do >> m = s:match("%d%d%d", i) >> if m then print(m) end >> end 123 234 345 456 567 678 789 890 >