lua 正则表达式中发生了一些奇怪的事情,我的脚本有什么问题?

Something Strange happend in lua regexp,What's wrong with my script?

Lua 的正则表达式与 Posix 正则表达式不兼容。例如%d表示\d表示Number:0到9。而'%'是转义。

我想匹配 "180*180,512*512" 之类的描述图像大小序列的内容。在 Posix 模式下,这个正则表达式对我有用:^(\d+\*\d+)(,\d+\*\d+)*$,我将其更改为 Lua 正则表达式模式:^(%d+%*%d+)(,%d+%*%d+)*$,但它不起作用。这是我的代码

#!/usr/local/bin/lua

source = '96*96,180*180';
format = "^(%d+%*%d+)(,%d+%*%d+)*$";


if (not string.find(source, format)) then
    print 'wrong!'
else
    print 'ok!'
end

Lua 没有 正则表达式。它有自己的模式,如 described in PiL.

对于您的特定情况,您可以简单地替换正则表达式:

^(\d+\*\d+)(,\d+\*\d+)*$

到以下模式:

^(%d+%*%d+)(,%d+%*%d+)$

请注意,我在您的第二个匹配组之后删除了 *,因为 Lua 不支持它。您将不得不求助于使用 gmatch 来捕获多个组:

local tMatches = {}
for sSize in str:gmatch "(%d+%*%d+)" do
    table.insert( tMatches, sSize )
end