在Lua中创建一个搜索模式以查找子字符串

我想创建一个 Lua 模式,可以帮助我在 docblock 或类似的多行字符串/注释中检索版本号。

现在它的样子是这样的:

s = [[/**
      * Let's pretend this is a random docblock...
      *
      * Very special line, super cool. Does many things.
      *
      * @version: 1.2.3
      * @author: Unknown
      */]]

local match = string.match(s, "@version%p%s%d%p%d")
print(match)

运行此代码会产生:

@version: 1.2

我想要的是一个可以匹配任何常见版本编号的模式,这就是我遇到难题的地方,因为正则表达式和 Lua 模式是我似乎永远也无法学会的东西。这是否可能使用 Lua 模式和 string.match 函数实现?

(如果你有“假人指南/正则表达式”我将永远欠你一个人情)

点赞
用户869951
用户869951

请注意,"将匹配任何常见"是非常宽泛的!但是如果您不需要处理版本号,例如您只想打印每个文件的版本行,则只需要这个:

local match = string.match(s, "@version:.-\n")
print(match) -- @version: 1.2.3rc1\n

你必须使用 .- 来代替 .*,因为你的字符串中有换行符,如果不这样做,匹配会延伸到字符串的末尾。

如果你只想要版本号本身,而且 "@version:" 从来没有变过,那么你只需要这个:

local match = string.match(s, "@version:%s+(.-)")
print(match) -- 打印 1.2.3rc1

如果你想要主要和次要版本号,那么你必须指定"任何常见":major.minor.patch,每个都有多个数字:

local match = string.match(s, "@version:%s+(%d+).(%d+).(%d+)(%w+)")
print(match) -- 打印      1       2       3       rc1
2014-02-28 22:27:27