在Lua模式中匹配可选数字。

我正在解析 diff3 命令的输出,一些行看起来像这样:

1:1,2c
2:0a

我对中间的数字感兴趣。它可能是一个单独的数字或由逗号分隔的一对数字。使用正则表达式,我可以像这样捕获它们:

/^\d+:(\d+)(?:,(\d+))?[ac]$/

在 Lua 中,最简单的等价物是什么?由于第二个数字是可选的,所以我无法将该正则表达式的直接翻译传递给 string.match 。

点赞
用户1190388
用户1190388

你也可以使用lua模式实现它:

local num = str:match '^%d+:(%d+),%d+[ac]$' or str:match '^%d+:(%d+)[ac]$'
2014-09-17 03:46:06
用户2206004
用户2206004

使用 Lua 模式,可以使用以下方式:

^%d+:(%d+),?(%d*)[ac]$

示例:

local n,m = string.match("1:2,3c", "^%d+:(%d+),?(%d*)[ac]$")
print(n,m) --> 2    3

local n,m = string.match("2:0a", "^%d+:(%d+),?(%d*)[ac]$")
print(n,m) --> 0

注意:本文使用机器翻译,可能存在语义不准确或错别字的情况,仅供参考。

2014-09-17 03:46:53