Lua中使用正则解析CMake输出返回nil问题求助
解决Lua解析CMake预设输出的问题
你的问题出在Lua的模式匹配语法和标准正则不同,不是string.gmatch的用法问题。Lua没有采用标准正则表达式,而是有自己的模式语法,几个关键差异导致原模式失效:
- Lua用
%s表示空白字符,而非\s - 匹配1次或多次重复用
+,而非{1,} - 非贪婪匹配用
.-,而非.*?
修正后的代码如下:
local s = [[Available configure presets: "x64-debug" - x64 Debug "x64-release" - x64 Release "x86-debug" - x86 Debug "x86-release" - x86 Release]] for name, desc in string.gmatch(s, [["(.-)"%s+-%s+(.*)]]) do print(name) print(desc) end
运行后会输出你期望的结果:
x64-debug x64 Debug x64-release x64 Release x86-debug x86 Debug x86-release x86 Release
另外需要注意:当模式包含多个捕获组时,string.gmatch每次迭代会返回所有捕获的结果,所以循环需要用对应数量的变量接收(这里是name和desc),原代码只用单个变量word会导致仅接收第一个捕获组,且因原模式匹配失败返回nil。
内容的提问来源于stack exchange,提问作者Acorn
相关产品推荐
相关产品推荐

