Lua模式匹配-相同字符的序列

Lua模式匹配-相同字符的序列,lua,pattern-matching,Lua,Pattern Matching,给定s=“AAABBC”, 我们可以在Lua中使用模式匹配提取相同字符的第一个序列吗?“AAA”是我期望得到的 我是这么想的 local s = "AAABBC" print(s:match("([A-Z])%1*")) 但它返回零 请帮忙!谢谢。在Lua模式中的模式反向引用不受支持,您可能需要使用一些支持这些构造的外部正则表达式库,如PCRE Egor Skriptunoff使用空字符作为相同字母组之间字符串内的临时标记: s:gsub("[A-Z]", "\0%0%0"):gsub("(.

给定s=“AAABBC”, 我们可以在Lua中使用模式匹配提取相同字符的第一个序列吗?“AAA”是我期望得到的

我是这么想的

local s = "AAABBC"
print(s:match("([A-Z])%1*"))
但它返回零


请帮忙!谢谢。

在Lua模式中的模式反向引用不受支持,您可能需要使用一些支持这些构造的外部正则表达式库,如PCRE

Egor Skriptunoff使用空字符作为相同字母组之间字符串内的临时标记:

s:gsub("[A-Z]", "\0%0%0"):gsub("(.)%z%1", "%1"):match"%z.([A-Z]+)"
对于
AAABBC
string,Egor的解决方案执行以下操作:

  • gsub(“[A-Z]”,“\0%0%0”)
    -将每个大写字母加倍,在每个序列之前插入一个空字符(
    AAABBC
    =>
    \u AA\u AA\u BB\u BB\u CC
    其中
    \uucode>重复一个空字符)(
    )
  • gsub(()%z%1“,“%1”)
    -将每个字符替换为一个空字符,后跟与之前完全相同的空字符,并使用相同的字符替换为空字符(
    \u AA\u AA\u BB\u BB\u CC
    =>
    \u AAAA\u BBB\u CC
    )(请参阅)
  • match”%z.([A-z]+)”
    匹配第一次出现的空字符,然后是任何字符,然后将任何1+大写字母捕获到组1(这是使用
    string.match
    )返回的值)

不支持模式中的反向引用,因此您需要使用一些外部正则表达式库,如PCRE。对于
“DAAABBC”
,输出应该是什么?请尝试
打印(s:gsub(“[A-Z]”,“\0%0%0”):gsub(()%Z%1),%1”):匹配“%Z.([A-Z]+”
@EgorSkriptunoff您是天才!试图理解你的代码。谢谢