lua 正则表达式

s="day30/05/1999"_,_,d,m,y=string.find(s,"(%d-)/(%d-)/(%d-)")print(d..","..m..","..y)... s = "day 30/05/1999"
_,_,d,m,y=string.find(s,"(%d-)/(%d-)/(%d-)")
print(d..","..m..","..y)
输出30,05,
为什么没有捕获到1999?
最后加上标识符$就可以捕获到。求高人解释一下
注意,我并不是做游戏的,我只是编程爱好者。不要扯不相关的话题。我只想知道为什么。
展开
 我来答
yihen18
推荐于2017-10-03 · TA获得超过1015个赞
知道小有建树答主
回答量:257
采纳率:100%
帮助的人:348万
展开全部
Lua中修饰符 - 和 * 都表示匹配前一字符0次或多次,但 - 进行的是最短匹配,类似传统正则中的非贪婪匹配,而 * 则是最长匹配,即贪婪匹配
由于你正则中最后一个(%d-)后面没有任何东西了,那这个 - 进行了最短匹配,即什么都不匹配,所以没有捕获到1999,而加上$后,由于有了结尾标识位,- 就必须匹配1999才能使整个正则匹配通过,所以就捕获了1999,或者你可以把最后个 - 换成 *,也可以捕获1999的
小宁哥哥498
2014-08-20 · 超过71用户采纳过TA的回答
知道答主
回答量:138
采纳率:100%
帮助的人:72.7万
展开全部
function extractChinese(s) for m in string.gmatch(s,'"[\176-\254]+"') do print(m) endendss = 'foo"中文"a"你好"foo'extractChinese(ss)
上面的输出为:
中文
你好

注意:这个函数假设你的“中文”是GB2312编码。如果是UTF-8编码,需要改一下。

PS: 你们公司是哪个公司啊?这样的水平还发布海外版本的游戏?不是说你哦,而是你们公司。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
秒懂百科精选
高粉答主

2021-01-15 · 每个回答都超有意思的
知道答主
回答量:60.8万
采纳率:14%
帮助的人:3.4亿
展开全部

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
go我可以520
2019-06-20
知道答主
回答量:18
采纳率:0%
帮助的人:4145
展开全部

关于Lua正则捕获的,可以参考下这篇文章,说得很详细

网页链接

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式