为什么lua的字符串模式匹配呢?

时间:2013-05-16 11:57:00

标签: windows winapi lua lua-patterns

我有一个监控CPU和GPU温度的外部应用程序......

我使用Lua和alien extension来获取这些值(通过GetWindowText)并对这些值进行一些模式匹配,有效地从字符串中提取温度数字,默认显示像CPU 67.875 °C ......这样的东西 但也许我对LUA中的模式如何工作有错误的想法(因为它们看起来不像正则表达式)?

我使用的模式是[%d]+[.%d+]*,它应匹配0到100.0之间的任何数字,对吗? 但奇怪的是,当值达到56.5度左右时,我getting incredibly strange output (见链接)

为什么会发生这种情况? 如何以XYY.ZZZ的格式提取0到100之间的正确浮点值(作为字符串),其中X不是可选的,Y是可选的,.是可选的1}}是可选的,除非Z存在?

1 个答案:

答案 0 :(得分:5)

您正在看到累积舍入误差的影响,因为0.16无法在浮点中精确表示。以下代码表现更好:

local n = 0
while n < 10000 do
    local s = tostring(n/100)
    local t = s:match("[%d]+[.%d+]*")
    print(t)
    n = n + 16
end

现在,针对您的问题,请尝试以下更简单的模式:

s="CPU 67.875 °C"
print(s:match("CPU +(.-) +"))