Lua模式匹配-相同字符的序列
给定s=“AAABBC”, 我们可以在Lua中使用模式匹配提取相同字符的第一个序列吗?“AAA”是我期望得到的 我是这么想的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("(.
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
匹配第一次出现的空字符,然后是任何字符,然后将任何1+大写字母捕获到组1(这是使用match”%z.([A-z]+)”
)返回的值)string.match
“DAAABBC”
,输出应该是什么?请尝试打印(s:gsub(“[A-Z]”,“\0%0%0”):gsub(()%Z%1),%1”):匹配“%Z.([A-Z]+”
@EgorSkriptunoff您是天才!试图理解你的代码。谢谢