用 Lua 匹配变量字符串
Matching variable string with Lua
我正在与文件搜索脚本作斗争
x99999999
值是连续可变的。如何找到与 lua 匹配的值?
我需要找到并更改此变量。
/home/data_x99999999_abc_def_0.sh
我确实有有效的代码,但我不确定它是否是正确的正则表达式。
local newpath = s:gsub("(_x)[^_]*(_)", "_static_")
I'm not sure it's a correct regex.
Lua 模式不是正则表达式。与正则表达式相比 Lua 的字符串模式具有不同的语法并且更受限制。
您的代码
local newpath = s:gsub("(_x)[^_]*(_)", "_static_")
将 "_x"
后跟 0 个或多个非下划线字符后跟 "_"
替换为 "_static_"
这是正确的,但不是很优雅。
- 捕获
()
不是必需的,因为您不使用它们。所以 "_x[^_]*_"
会达到同样的效果。
- 如果您知道只有 x12345678 部分发生变化并且 x 之后只有数字,您可以简单地使用
"x%d+"
并将其替换为 "static"
。这匹配 "x"
后跟 1 个或多个数字。或者你包括下划线。
- 如果您只想精确匹配 8 位数字,您可以使用
"%d%d%d%d%d%d%d%d"
或 string.rep("%d",8)
我正在与文件搜索脚本作斗争
x99999999
值是连续可变的。如何找到与 lua 匹配的值?
我需要找到并更改此变量。
/home/data_x99999999_abc_def_0.sh
我确实有有效的代码,但我不确定它是否是正确的正则表达式。
local newpath = s:gsub("(_x)[^_]*(_)", "_static_")
I'm not sure it's a correct regex.
Lua 模式不是正则表达式。与正则表达式相比 Lua 的字符串模式具有不同的语法并且更受限制。
您的代码
local newpath = s:gsub("(_x)[^_]*(_)", "_static_")
将 "_x"
后跟 0 个或多个非下划线字符后跟 "_"
替换为 "_static_"
这是正确的,但不是很优雅。
- 捕获
()
不是必需的,因为您不使用它们。所以"_x[^_]*_"
会达到同样的效果。 - 如果您知道只有 x12345678 部分发生变化并且 x 之后只有数字,您可以简单地使用
"x%d+"
并将其替换为"static"
。这匹配"x"
后跟 1 个或多个数字。或者你包括下划线。 - 如果您只想精确匹配 8 位数字,您可以使用
"%d%d%d%d%d%d%d%d"
或string.rep("%d",8)