Lua中的n位模式匹配
2012-9-7 12:6:17
收藏:0
阅读:148
评论:2
我是 Lua 的新手。
假设我有一个字符串 "1234567890"。
我想遍历所有可能的 3 位数字(例如 123、234、345、456....
)。
for m in string.gmatch("1234567890","%d%d%d") do
print (m)
end
但这会给我输出 123,456,789
。
我应该使用什么样的模式?
其次,一个相关的问题,我如何指定一个“3 位数字”?"%3d"
似乎不起作用。"%d%d%d"
是唯一的方法吗?
说明:这个问题没有被标记为 Regular expression
,因为 Lua 没有 RegExp。(至少本机没有)
提前感谢:)
更新: 正如 Amber 指出的,Lua 中没有“重叠”的匹配。关于第二个问题,我现在被困在使用 string.rep("%d",n)
,因为 Lua 不支持固定数量的重复。
原文链接 https://stackoverflow.com/questions/3952360
点赞
stackoverflow用户68204
您是正确的,核心的 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
这将产生以下输出:
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
>
2010-10-17 22:14:31
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
gmatch
从不返回重叠匹配(而gsub
永远不会替换重叠匹配,顺便说一句)。你最好的选择可能是迭代所有可能的长度为3的子字符串,检查每个子字符串是否与3位数字的匹配模式相匹配,如果是,则对它们进行操作。
(是的,
%d%d%d
是唯一的写法。Lua的简写模式支持没有固定数量重复语法。)