windows - lua的字符串模式匹配为什么要这样做呢?

标签 windows winapi lua lua-patterns

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

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

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

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

最佳答案

您看到了累积舍入误差的影响,因为 0.16 无法用 float 精确表示。下面的代码执行得更好:

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 +(.-) +"))

关于windows - lua的字符串模式匹配为什么要这样做呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16586770/

相关文章:

windows - 使用 Powershell 的 Invoke-Command 调用带参数的批处理文件

c++ - MouseHookProc 和 Sleep()

audio - 如何在Lua中发出声音警报?

Lua:字符类型

python - 使用 bash 文件运行两个 python 脚本

c# - 使用 MiniDump (DbgHelp.h) 获取句柄数据

c - 用 C 语言进行 Win32 API 控制台编程

c++ - 多连接客户端套接字应用程序C++

lua - 如何在Lua中将B组中找到的所有元素删除到A组中

php - 保护 PHP 源代码