Lua模式匹配,在比赛前获得角色

时间:2016-08-10 16:55:17

标签: lua pattern-matching

目前我的代码如下所示:

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

StringToPrint将如下所示:

param=hello&456

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

我希望我的字符串显示为:param=helloZ&456。换句话说,我想在用&替换字符串valueZ之前保留hello之前的字符,以使其成为helloZ。怎么办呢?

2 个答案:

答案 0 :(得分:1)

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

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

这里的事情是我匹配最短的字符串,结尾的字符不是&和一个&amp ;.然后我将两个结束字符添加到被替换的部分。

答案 1 :(得分:1)

我建议:

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

请参阅Lua demo

此处,模式匹配:

  • param= - 文字子串param=
  • [^&]* - 尽可能多的&以外的0个或多个字符
  • ([^&]) - 第1组捕获&以外的符号(此处将发生回溯,因为之前的模式会抓取除&以外的所有此类字符,然后引擎将采用退后一步,将该块中的最后一个字符放入组1)。