我有两段代码根据模式分解字符串。
第一个:
local test = "whop^1whap^2whup"
local pattern = "%^[12]"
local lastpos = 1
for startpos, endpos in string.gmatch( test, "()"..pattern.."()" ) do
print("pos: "..startpos..","..endpos)
print("str: "..string.sub(test,lastpos,startpos-1))
print("match: "..string.sub(test,startpos,endpos-1))
lastpos = endpos
end
这个分解了^ 1或^ 2周围的字符串。它输出:
pos: 5,7
str: whop
match: ^1
pos: 11,13
str: whap
match: ^2
第二个版本是:
local test = "whop^t1whap^02whup"
local pattern = "%^[(t1)(02)]"
local lastpos = 1
for startpos, endpos in string.gmatch( test, "()"..pattern.."()" ) do
print("pos: "..startpos..","..endpos)
print("str: "..string.sub(test,lastpos,startpos-1))
print("match: "..string.sub(test,startpos,endpos-1))
lastpos = endpos
end
这个是支持在^ t1或^ 02分解字符串。相反,我得到了这个:
pos: 5,7
str: whop
match: ^t
pos: 12,14
str: 1whap
match: ^0
我注意到第一个pos(5,7)与第一段代码完全相同,即使模式长度应为3个字符。
我做错了什么?
答案 0 :(得分:4)
Lua模式不是正则表达式。例如,模式[(t1)(02)]
并不意味着“匹配字符串't1'或'02'”。这意味着“匹配字符'(','t','1','0','2'或')'”。 Lua模式中缺少这样的功能使得它们更容易实现(因此使Lua标准库更小)。
你已经达到Lua模式解析能力的极限。如果你需要正则表达式,我建议你下载一个实现它们的Lua模块。