目前我的代码看起来像这样:
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)
这里的问题是,我匹配以非&字符结尾的最短字符串;字符是&然后将两个结束字符添加到替换的部分。