Lua模式匹配,在匹配前获取字符



目前我的代码看起来像这样:

somestring = "param=valueZ&456"
local stringToPrint = (somestring):gsub("(param=)[^&]+", "%1hello", 1)

stringtopprint看起来像这样:

param=hello&456

我已经用字符串"hello"替换了&之前的所有字符。这就是我的问题变得有点奇怪和具体的地方。

我希望我的字符串显示为:param=helloZ&456。换句话说,当用hello替换字符串valueZ以使其成为helloZ时,我想保留&之前的字符。如何做到这一点?

我建议:

somestring:gsub("param=[^&]*([^&])", "param=hello%1", 1)

查看Lua演示

这里,模式匹配:

  • param= -文字子字符串param=
  • [^&]* - 0或&以外的更多字符尽可能多
  • ([^&]) -第1组捕获&以外的符号(在这里,将发生回溯,因为之前的模式捕获&以外的所有这些字符,然后引擎将退后一步,并将该块的最后一个字符放入第1组)。

可能还有其他方法可以做到这一点,但这里是一个:

somestring = "param=valueZ&456"
local stringToPrint = (somestring):gsub("(param=).-([^&]&)", "%1hello%2", 1)
print(stringToPrint)

这里的问题是,我匹配以非&字符结尾的最短字符串;字符是&然后将两个结束字符添加到替换的部分。

最新更新