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

时间:2016-09-01 07:08:12

标签: lua string-matching lua-patterns

我想提取包含key="VALUE"的行的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 个答案:

答案 0 :(得分:1)

您根本不需要使用[^%1]。根据定义,只需使用.-,就可以匹配最小的字符串。

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

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

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