Lua正则表达式发生了奇怪的事情,我的脚本出了什么问题?

Lua 的正则表达式与 Posix 正则表达式不兼容。例如,%d 表示 \d,表示数字 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
点赞
用户1190388
用户1190388

Lua 并不 支持正则表达式。它有自己的模式,正如 PiL 中所描述的

对于你的特定情况,你可以用以下模式简单地替换掉正则表达式:

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

请注意,我删除了第二个匹配组后面的 *,因为 Lua 不支持它。你必须使用 gmatch来捕获多个组:

local tMatches = {}
for sSize in str:gmatch "(%d+%*%d+)" do
    table.insert( tMatches, sSize )
end
2015-10-21 06:36:30