Lua 模式中的捕获组匹配文字数字字符而不是捕获组

Capture group in Lua pattern matches literal digit character instead of capture group

我想提取包含 key="VALUE" 的行的值,我正在尝试使用简单的 Lua 模式来解决这个问题。

它适用于那些在 VALUE 中包含文字 1 的行。似乎模式解析器混淆了我的转义序列捕获组。

> return  string.find('... key = "PHONE2" ...', 'key%s*=%s*(["\'])([^%1]-)%1')
5       18      "       PHONE2
> return  string.find('... key = "PHONE1" ...', 'key%s*=%s*(["\'])([^%1]-)%1')
nil
>

您根本不需要使用 [^%1]。只需使用 .-,因为根据定义,它匹配尽可能小的字符串。

此外,您可以使用多行字符串语法,不必转义模式中的引号:

> s=[[... key = "PHONE1" ...]]
> return s:find [[key%s*=%s*(["'])(.-)%1]]
5       18      "       PHONE1

模式 [^%1] 实际上意味着,不要单独搜索字符 %1