Iterators and Generic For
Gmatch Words
string.gmatch returns an iterator that walks matches in a string.
pattern iterator
`string.gmatch` fits directly in a generic `for` loop and yields one match at a time.
Gmatch Words
gmatch_words.lua
Replay: real traced execution (multi-file project)
local text = "red blue"
local count = 0
local lastWord = ""
for word in string.gmatch(text, "%w+") do
count = count + 1
lastWord = word
end
print("text=" .. text)
print("count=" .. count)
print("lastWord=" .. lastWord)
local text = "green gold"
local count = 0
local lastWord = ""
for word in string.gmatch(text, "%w+") do
count = count + 1
lastWord = word
end
print("text=" .. text)
print("count=" .. count)
print("lastWord=" .. lastWord)
local text = "one two"
local count = 0
local lastWord = ""
for word in string.gmatch(text, "%w+") do
count = count + 1
lastWord = word
end
print("text=" .. text)
print("count=" .. count)
print("lastWord=" .. lastWord)
text ← red blue, count ← 0, lastWord ← (empty)
1local text→ red blue = "red blue" --@text="green gold", "one two"2local count→ 0 = 03local lastWord→ (empty) = ""count ← 1, lastWord ← red
pass 1 of 25for wordred in string.gmatch(textred blue, "%w+") do6 count→ 1 = count + 17 lastWord→ red = wordred8endcount ← 2, lastWord ← blue
pass 2 of 25for wordblue in string.gmatch(textred blue, "%w+") do6 count→ 2 = count + 17 lastWord→ blue = wordblue8endprint("text=" .. text)
10print("text=" .. textred blue)11print("count=" .. count2)12print("lastWord=" .. lastWordblue)outputtext=red blue count=2 lastWord=blue
text ← green gold, count ← 0, lastWord ← (empty)
1local text→ green gold = "green gold"2local count→ 0 = 03local lastWord→ (empty) = ""count ← 1, lastWord ← green
pass 1 of 25for wordgreen in string.gmatch(textgreen gold, "%w+") do6 count→ 1 = count + 17 lastWord→ green = wordgreen8endcount ← 2, lastWord ← gold
pass 2 of 25for wordgold in string.gmatch(textgreen gold, "%w+") do6 count→ 2 = count + 17 lastWord→ gold = wordgold8endprint("text=" .. text)
10print("text=" .. textgreen gold)11print("count=" .. count2)12print("lastWord=" .. lastWordgold)outputtext=green gold count=2 lastWord=gold
text ← one two, count ← 0, lastWord ← (empty)
1local text→ one two = "one two"2local count→ 0 = 03local lastWord→ (empty) = ""count ← 1, lastWord ← one
pass 1 of 25for wordone in string.gmatch(textone two, "%w+") do6 count→ 1 = count + 17 lastWord→ one = wordone8endcount ← 2, lastWord ← two
pass 2 of 25for wordtwo in string.gmatch(textone two, "%w+") do6 count→ 2 = count + 17 lastWord→ two = wordtwo8endprint("text=" .. text)
10print("text=" .. textone two)11print("count=" .. count2)12print("lastWord=" .. lastWordtwo)outputtext=one two count=2 lastWord=two