我想提取包含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
>
答案 0 :(得分:1)
您根本不需要使用[^%1]
。根据定义,只需使用.-
,就可以匹配最小的字符串。
此外,您可以使用多行字符串语法,而不必转义模式中的引号:
> s=[[... key = "PHONE1" ...]]
> return s:find [[key%s*=%s*(["'])(.-)%1]]
5 18 " PHONE1
模式[^%1]
实际上意味着,不要单独搜索字符%
和1
。