You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 13:20:55