繁体   English   中英

将字符串拆分为Lua中的子字符串

[英]Splitting string into substrings in Lua

我正在尝试使用Lua将字符串拆分为子字符串。 使用下面for循环中的模式我预计会有4个匹配,但我只得到2个。

print(words[1])

“### Lorem ipsum dolor sit amet,Grußsumtetursadipscing elitr,sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat,sed diam \\ n”

print(words[2])显示

“###在vero eos et accusam et justo duo dolores et ea rebum.Stet clita \\ nkasd gubergren,no seatakimataGrußsanctusest \\ n”

有人可以解释一下这种行为吗?

i=0
content = "###Lorem ipsum dolor sit amet, Gruß consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam \n ###voluptua. ###At vero eos et accusam et justo duo dolores et ea rebum. Stet clita \nkasd gubergren, no sea takimata Gruß sanctus est \n###XLorem ipsum dolor sit amet. Lorem ipsum \ndolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor \ninvidunt ut labore et Gruß dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.sdl"
for word in string.gmatch(content, '###') 
do i = i+1 end

if(i>1) then 
 content = content .. '###'
else end

words= {}    
for y in string.gmatch(content,"(###.-)###")
do  
   table.insert(words, y) 
end

print(words[3])

这是第二个循环的简化版本:

content = '###aa###bb###cc###dd###'
words= {}    
for y in string.gmatch(content,"(###.-)###") do  
    print(y)
    table.insert(words, y) 
end

输出:

###aa
###cc

问题是,对于模式(###.-)### ,第二个###也被消耗了。 你需要的是正则表达式的前瞻(###.+?)(?=###) 不幸的是,Lua模式不支持前瞻。 这是一种可能的解决方法:

local left = content
local start = 1
while true do
    start, index, match = string.find(left, "(###.-)###")
    if not start then break end
    print(match)
    left = left:sub(index - 3)   --3 is the length of "###"
end

你的第一个循环找到了四个匹配。 试试这个来确认:

for word in string.gmatch(content, '###([^#]+)') do
  print(word)
end

如果这对你有用,那么根据需要在循环中保存word

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM