目前我的代码如下所示:
somestring = "param=valueZ&456"
local stringToPrint = (somestring):gsub("(param=)[^&]+", "%1hello", 1)
StringToPrint将如下所示:
param=hello&456
我已使用字符串“hello”替换&
之前的所有字符。这是我的问题变得有点奇怪和具体的地方。
我希望我的字符串显示为:param=helloZ&456
。换句话说,我想在用&
替换字符串valueZ
之前保留hello
之前的字符,以使其成为helloZ
。怎么办呢?
答案 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)。