用 Lua 匹配变量字符串

问题描述

我正在处理文件搜索脚本
x99999999 值是连续可变的。如何通过 lua 匹配找到这个值?
我需要找到并更改此变量。

/home/data_x99999999_abc_def_0.sh 

我实际上有可以工作的代码,但我不确定它是否是正确的正则表达式。

local newpath = s:gsub("(_x)[^_]*(_)","_static_")

解决方法

我不确定它是否是正确的正则表达式。

Lua 模式不是正则表达式。与正则表达式相比,Lua 的字符串模式具有不同的语法并且更加有限。

您的代码

local newpath = s:gsub("(_x)[^_]*(_)","_static_")

"_x" 后跟 0 个或多个非下划线字符后跟 "_" 替换为 "_static_"

这是正确的,但不是很优雅。

  1. 捕获 () 不是必需的,因为您不使用它们。所以 "_x[^_]*_" 会达到同样的效果。
  2. 如果您知道只有 x12345678 部分发生变化并且 x 之后只有数字,您可以简单地使用 "x%d+" 并用 "static" 替换它。这匹配 "x" 后跟 1 个或多个数字。或者您包括下划线。
  3. 如果您只想匹配 8 位数字,您可以使用 "%d%d%d%d%d%d%d%d"string.rep("%d",8)