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

text
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)
  1. text ← red blue, count ← 0, lastWord ← (empty)

    1local text→ red blue = "red blue" --@text="green gold", "one two"2local count→ 0 = 03local lastWord→ (empty) = ""
  2. count ← 1, lastWord ← red

    pass 1 of 2
    5for wordred in string.gmatch(textred blue, "%w+") do6  count→ 1 = count + 17  lastWord→ red = wordred8end
  3. count ← 2, lastWord ← blue

    pass 2 of 2
    5for wordblue in string.gmatch(textred blue, "%w+") do6  count→ 2 = count + 17  lastWord→ blue = wordblue8end
  4. print("text=" .. text)

    10print("text=" .. textred blue)11print("count=" .. count2)12print("lastWord=" .. lastWordblue)
    outputtext=red blue
    count=2
    lastWord=blue
  1. text ← green gold, count ← 0, lastWord ← (empty)

    1local text→ green gold = "green gold"2local count→ 0 = 03local lastWord→ (empty) = ""
  2. count ← 1, lastWord ← green

    pass 1 of 2
    5for wordgreen in string.gmatch(textgreen gold, "%w+") do6  count→ 1 = count + 17  lastWord→ green = wordgreen8end
  3. count ← 2, lastWord ← gold

    pass 2 of 2
    5for wordgold in string.gmatch(textgreen gold, "%w+") do6  count→ 2 = count + 17  lastWord→ gold = wordgold8end
  4. print("text=" .. text)

    10print("text=" .. textgreen gold)11print("count=" .. count2)12print("lastWord=" .. lastWordgold)
    outputtext=green gold
    count=2
    lastWord=gold
  1. text ← one two, count ← 0, lastWord ← (empty)

    1local text→ one two = "one two"2local count→ 0 = 03local lastWord→ (empty) = ""
  2. count ← 1, lastWord ← one

    pass 1 of 2
    5for wordone in string.gmatch(textone two, "%w+") do6  count→ 1 = count + 17  lastWord→ one = wordone8end
  3. count ← 2, lastWord ← two

    pass 2 of 2
    5for wordtwo in string.gmatch(textone two, "%w+") do6  count→ 2 = count + 17  lastWord→ two = wordtwo8end
  4. print("text=" .. text)

    10print("text=" .. textone two)11print("count=" .. count2)12print("lastWord=" .. lastWordtwo)
    outputtext=one two
    count=2
    lastWord=two