Lua 模式匹配中,捕获组与数字字面值混淆

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

除了带有数字字面值 1 的 VALUE 的行之外,其他的行都可以识别。似乎模式解析器将我的捕获组与转义序列混淆了。

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

点赞
用户1190388
用户1190388

你完全不需要使用 [^%1]。只需使用 .-,因为它的定义是匹配最小可能的字符串。

而且,你可以使用多行字符串语法,避免在模式中转义引号:

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

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

2016-09-01 07:36:31