高级 Lua 模式匹配

我想知道在 Lua 中是否有可能实现以下这两种情况:

我有一个看起来像这样的字符串:some_value=averylongintegervalue

假设我知道在 = 符号之后字符串中恰好有 21 个字符,有没有一种简便的方法将字符串 averylongintegervalue 替换为我想要的字符串?(即,比手动敲出 string.gsub("some_value=averylongintegervalue", "some_value=.....................", "some_value=anewintegervalue") 更方便的方法)

现在我们改变原来的字符串,让它看起来像这样:some_value=averylongintegervalue&

假设我们不知道 = 符号后有多少个字符,有没有一种方法可以替换 some_value=& 之间的字符串?

我知道这是一个非常特殊的问题,但我经常需要使用正则表达式执行类似的任务,并希望知道如何使用 Lua 中的模式匹配来完成这一任务。

点赞
用户1442917
用户1442917

是的,您可以使用以下内容(%1指示模式中的第一个捕获,本例中捕获了some_value =):

local str = ("some_value = averylongintegervalue "): gsub("(some_value =)[^&]+", "%1replaced")

这应该分配som_value = replaced

您是否知道是否还可以用一个单一字符重复替换每个等号(=)和符号(&)之间的每个字符(例如,重复21次的*符号,而不是常量字符串如“replaced”)?

是的,但您需要使用一个功能:

local str = ("some_value = averylongintegervalue")
  :gsub((“some_value =)([^&]+)”,functionabreturn a ..(“#”):rep(#bend

这将分配som_value =###############################。如果您需要将其限制为仅替换一次,请在gsub的最后一个参数中添加“,1”(如Wiktor在评论中建议的)。

2016-08-02 19:04:17