Lua模式中的捕获组匹配文字数字字符,而不是捕获组
我想提取包含Lua模式中的捕获组匹配文字数字字符,而不是捕获组,lua,string-matching,lua-patterns,Lua,String Matching,Lua Patterns,我想提取包含key=“VALUE”的行的值,我正试图使用一个简单的Lua模式来解决这个问题 它适用于除值中包含文字1的行以外的行。模式解析器似乎混淆了我的捕获组的转义序列 > return string.find('... key = "PHONE2" ...', 'key%s*=%s*(["\'])([^%1]-)%1') 5 18 " PHONE2 > return string.find('... key = "PHONE1" ...',
key=“VALUE”
的行的值,我正试图使用一个简单的Lua模式来解决这个问题
它适用于除值中包含文字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
。谢谢。我还发现,我会逃离1,迫使它将捕获组包括在集合中<代码>[^%\1]您的解决方案更有意义而且更干净。我会用的。@nolan在这种情况下,你只想用[^\1]
。%
字符不是必需的。实际上不是。非常感谢。