在lua regexp中发生了奇怪的事情,我的脚本出了什么问题?

时间:2015-10-21 06:29:12

标签: regex lua lua-patterns

Lua的正则表达式与Posix RegExp不兼容。例如,%d表示\d表示数字:0到9.而'%'表示转义。

我希望匹配描述图像大小顺序的"180*180,512*512"之类的内容。在Posix模式下,此正则表达式对我有效:^(\d+\*\d+)(,\d+\*\d+)*$,我将其更改为Lua regexp模式:^(%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

1 个答案:

答案 0 :(得分:1)

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