无效的转义序列lua正则表达式
2018-12-12 9:51:15
收藏:0
阅读:226
评论:2
我已经编写了一个用于匹配以下字符串类型的正则表达式,当我在在线正则匹配器中检查它时,它按预期工作-
"['432', '212']"
正则表达式 - "(\[)('([^']|'')*'), ('([^']|'')*')(])"
ngx.re.find(string, "\"(\[)('([^']|'')*'), ('([^']|'')*')(])\"", "jo")
当我在lua块中使用它来匹配字符串时,它给出无效的转义序列错误。 我转义了双引号,并尝试用\转义正则表达式中的特殊字符,但问题仍然存在。任何指针都可以帮助。谢谢!
点赞
用户9383219
我将重申评论中人们所说的内容。您在正则表达式中使用了 [ ,这是一个被引用的字符串。在引用字符串中,反斜杠(\)开始一个转义序列,但 [ 是一个无效的转义序列(请参见 Lua 5.1 手册 了解有效的转义序列),因此 Lua 解析器会报错。 Vanilla Lua 5.1 只会删除反斜杠(这在这个正则表达式中会有问题),而 Lua 5.3 和 LuaJIT 会报错。
您可以通过使用另一个反斜杠进行转义来删除解析错误,并确保反斜杠实际上插入到字符串中 - "\\ [" - 就像在使用 RegExp 构造函数时必须在 JavaScript 中做的那样,或者使用一个不解释转义序列的长字符串 -[[\ []]。 如果您使用长字符串,则还必须将正则表达式中的转义双引号 \" 替换为普通的 "。
2018-12-12 07:29:18
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在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 代码?

个人而言,即使是对于最简单的模式,我也更喜欢编写解析器。 它比正则表达式更灵活,并且即使它变得更大,它仍然可读。 下面我使用 LPEG展示了一个用于匹配所需表达式的解析器。
您可以在此处找到一份很好的 LPEG 教程:http://leafo.net/guides/parsing-expression-grammars.html
local lpeg = assert(require("lpeg")) local C, Ct, P, R, S = lpeg.C, lpeg.Ct, lpeg.P, lpeg.R, lpeg.S -- optional whitespace (zero or more) local ws = S" \n\r\t"^0 -- quoted integer, converted to number local quot = P"'" * C(R"09"^1) / tonumber * P"'" -- integer followed by zero or more commas followed by integer local list = quot * ws * (P"," * ws * quot)^0 -- [ followed by list of integers captured in a table followed by ] local rule = P"[" * ws * Ct(list) * ws * P"]" -- match the string and collect results local nums = rule:match("['432', '212']") -- print result table print(table.concat(nums,","))$ lua test.lua 432,212