Lua中的string.match使用了不规则的正则表达式吗?
2011-8-21 12:13:59
收藏:0
阅读:115
评论:3
我好奇为什么这不起作用,需要知道如何解决它;我试图检测一些输入是否是问题,我相当确信 string.match 是我需要的,但是:
print(string.match("how much wood?", "(how|who|what|where|why|when).*\\?"))
返回 nil。我相当确定 Lua 的 string.match 使用正则表达式在字符串中查找匹配,因为我以前使用过通配符(.),但也许我不理解所有的机制? Lua 在其字符串函数中需要特殊的定界符吗?我在此处测试了我的正则表达式这里,因此,如果 Lua 使用常规正则表达式,似乎上面的代码将返回“how much wood?”。
你们中的任何人都可以告诉我我做错了什么,我想做什么,或者指引我到一个好的参考资料,让我了解 Lua 的字符串操纵函数如何利用正则表达式的全面信息?
原文链接 https://stackoverflow.com/questions/7138189
点赞
stackoverflow用户111886
根据官方手册,Lua的模式匹配不支持交替匹配。
所以,"how.*"
可以匹配成功,但是"(how|what).*"
不能。
而且kapep关于问号在.*
中被吞噬的说法是正确的。
还有一个相关问题:Lua模式匹配与正则表达式。
2011-08-21 12:27:11
stackoverflow用户9155965
正如他们之前已经回答过的,这是因为 Lua 中的模式与其他语言中的正则表达式不同,但如果您还没有找到一个足够强大的模式来完成所有工作,您可以尝试这个简单的函数:
local function capture_answer(text)
local text = text:lower()
local pattern = '([how]?[who]?[what]?[where]?[why]?[when]?[would]?.+%?)'
for capture in string.gmatch(text, pattern) do
return capture
end
end
print(capture_answer("how much wood?"))
输出:how much wood?
这个函数还可以帮助您在更大的文本字符串中找到问题
例如:
print(capture_answer("Who is the best football player in the world?\nWho are your best friends?\nWho is that strange guy over there?\nWhy do we need a nanny?\nWhy are they always late?\nWhy does he complain all the time?\nHow do you cook lasagna?\nHow does he know the answer?\nHow can I learn English quickly?"))
输出:
who is the best football player in the world?
who are your best friends?
who is that strange guy over there?
why do we need a nanny?
why are they always late?
why does he complain all the time?
how do you cook lasagna?
how does he know the answer?
how can i learn english quickly?
2020-03-29 02:13:45
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在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 模式将字符串(嵌套数组)转换为真正的数组?
Lua 不使用正则表达式。Lua 使用 Patterns ,看起来相似但匹配不同的输入。
.*
还会消耗输入中的最后一个?
,所以它在\\?
上失败了。应该排除问号。特殊字符使用%
转义。"how[^?]*%?"
正如 Omri Barel 所说,没有交替运算符。你可能需要使用多个模式,每个句子开头的替代单词使用一个模式。或者你可以使用支持正则表达式的库。