我想知道在Lua中是否可以使用这两种方案中的任何一种:
我有一个类似的字符串:some_value=averylongintegervalue
假设我知道字符串中的=
符号后面正好有21个字符,是否有一种简短的方法可以用我自己的字符串替换字符串averylongintegervalue
? (比输入更简单:string.gsub("some_value=averylongintegervalue", "some_value=.....................", "some_value=anewintegervalue")
假设我们将原始字符串编辑为:some_value=averylongintegervalue&
假设我们不知道=
符号后面有多少个字符,是否有办法替换some_value=
和&
之间的字符串?
我知道这是一个奇怪的具体问题,但我经常发现自己需要使用正则表达式执行类似的任务,并且想知道如何使用模式匹配在Lua中完成。
答案 0 :(得分:3)
是的,您可以使用以下内容(%1
指的是模式中的第一个捕获,在这种情况下捕获some_value=
):
local str = ("some_value=averylongintegervalue"):gsub("(some_value=)[^&]+", "%1replaced")
这应该指定some_value=replaced
。
您知道是否也可以替换=和&之间的每个字符。重复单个字符(例如*符号重复21次而不是像替换的常量字符串)?
是的,但你需要使用一个功能:
local str = ("some_value=averylongintegervalue")
:gsub("(some_value=)([^&]+)", function(a,b) return a..("#"):rep(#b) end)
这将分配some_value=#####################
。如果您需要将此限制为仅一次替换,请将,1
添加为gsub的最后一个参数(如评论中的Wiktor建议)。