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

3
我想要提取包含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个回答

1

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

另外,您可以使用多行字符串语法,以免在模式中转义引号:

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

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

谢谢。我也发现我需要转义数字1,以强制将捕获组包含在集合中。[^%\1] 你的解决方案更有意义,更简洁。我会使用它。 - nolan
在这种情况下,您只需要使用 [^\1]% 字符不是必需的。 - hjpotter92
确实不是。谢谢。 - nolan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接