引用文本的正确 Lua 模式是什么?
我已经试了一两个小时了,发现自己在Lua模式匹配工具方面遇到了障碍。我正在尝试匹配字符串中的所有引用文本,并在需要时进行替换。
到目前为止,我想出来的模式是:(\?[\"\'])(.-)%1
这在某些情况下有效,但并非所有情况:
有效: "This \"is a\" string of \"text to\" test with"
无效: "T\\\"his \"is\' a\" string\" of\' text\" to \"test\" wit\\\"h"
在无效示例中,我希望它匹配到(我已经编写了一个函数,获取我需要的匹配项,我只是在寻找能够用于gsub的模式,并且很好奇是否有一个Lua模式可以做到这一点):
string
a" string" of
is' a" string" of' text
test
his "is' a" string" of' text" to "test" wit
目前我打算继续使用我的函数,但是我很好奇是否有模式我可以/应该使用,只是我可能错过了一些东西。
原文链接 https://stackoverflow.com/questions/4317308
对于转义引号的问题,一般而言,如果引号前面有奇数个反斜杠,那么它就被转义了,如果有偶数个则没有。我不认为 Lua 的模式匹配足够强大以表示这个条件,因此如果您需要解析此类文本,则应寻找另一种方法。也许你可以遍历字符串并解析它,或者你可以依次找到每个引号并向后读取,计算反斜杠的数量,直到找到一个非反斜杠字符(或字符串的开头)。
如果您一定要出于某种原因使用模式,可以尝试使用多个步骤来完成。首先,用 gsub 替换所有连续两个反斜杠出现的情况,并用某个标志值替换它们。这个标志值一定要是字符串中不存在的值。如果你知道这个字符串不包含非可打印字符,可以尝试使用 "\001" 这样的值。不管怎样,一旦你替换了所有连续的两个反斜杠序列,剩下的反斜杠就是用来转义后面的字符的。现在你可以应用你原来的模式,最后你可以将所有标志值实例替换回两个反斜杠。
使用正则表达式匹配转义、带引号的文本就像使用割草机仅割开雏菊一样困难。
我写了一个能得到我想要的匹配结果的函数。
这是正确的做法。
我好奇能否使用 Lua 模式来实现这个。
从实际角度看,即使模式能够实现,你也不想使用它。从理论角度看,你正试图找到一个由偶数个反斜杠前置的双引号。这绝对是一个正则语言,而你想要的正则表达式应该是像下面这样的(使用 Lua 引用约定):
[[[^\](\\)*"(.-[^\](\\)*)"]]
被引用的字符串将成为结果 #2。但是 Lua 模式并不是完整的正则表达式,特别是在带括号的模式后面不能加上 *
。
所以我猜这个问题不能使用 Lua 模式来解决,但由于 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 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
你不应该尝试用正则表达式来解析 HTML,HTML 和 XML 不是正则语言,因此不能成功地用正则表达式进行操作。你应该使用专门的 HTML 解析器。这里有很多解释。