Regex 高级Lua模式匹配

Regex 高级Lua模式匹配,regex,lua,pattern-matching,Regex,Lua,Pattern Matching,我想知道这两种情况中的任何一种/两种在Lua中是否可行: 我有一个类似这样的字符串:some\u value=averylongintegervalue 假设我知道字符串中的=符号后面正好有21个字符,有没有一种简单的方法可以用我自己的替换字符串averylongintegervalue?(也就是说,一种比键入更简单的方法:string.gsub(“some\u value=averylongintegervalue”,“some\u value=……”,“some\u value=anewin

我想知道这两种情况中的任何一种/两种在Lua中是否可行:

我有一个类似这样的字符串:
some\u value=averylongintegervalue

假设我知道字符串中的
=
符号后面正好有21个字符,有没有一种简单的方法可以用我自己的替换字符串
averylongintegervalue
?(也就是说,一种比键入更简单的方法:
string.gsub(“some\u value=averylongintegervalue”,“some\u value=……”,“some\u value=anewintegervalue”)

假设我们将原始字符串编辑成这样:
some\u value=averylongintegervalue&

假设我们不知道
=
符号后面有多少个字符,有没有办法替换
某些值=
&
之间的字符串


我知道这是一个奇怪的特定问题,但我经常发现自己需要使用regex执行类似的任务,并且想知道如何在Lua中使用模式匹配来完成这些任务。

是的,您可以使用以下内容(
%1
指模式中的第一个捕获,在本例中,它捕获
某些值=
):

这应该分配
一些值=替换的

您知道是否也可以将=和&之间的每个字符替换为重复的单个字符(例如*符号重复21次,而不是替换为常量字符串)

是的,但您需要使用一个函数:

local str = ("some_value=averylongintegervalue")
  :gsub("(some_value=)([^&]+)", function(a,b) return a..("#"):rep(#b) end)

这将分配
some#u值=#.

我认为可以,但这里似乎应该有一个替换,因此可以将限制参数
1
传递给
gsub
。哦,太好了,谢谢!您知道是否也可以用一个重复的字符替换
=
&
之间的每个字符(例如*符号重复了21次,而不是像
这样的常量字符串被替换了
)?
local str = ("some_value=averylongintegervalue")
  :gsub("(some_value=)([^&]+)", function(a,b) return a..("#"):rep(#b) end)