Lua Memo

string.gmatch ... キャプチャした文字列を次々と返す

呼ばれるたびに文字列 s から pattern でキャプチャされた部分を次々と返すような、イテレータ関数を返す。

pattern にキャプチャが指定されていなければ、それぞれの呼び出しごとに、マッチした文字列全体を返す。

例えば、以下のループでは

  s = "hello world from Lua"
  for w in string.gmatch(s, "%a+") do
    print(w)
  end

文字列 s のすべての単語について繰り返し、それぞれを別々の行に出力する。次の例は、与えられた文字列から key=value のペアを集めてテーブルへ入れる。

  t = {}
  s = "from=world, to=Lua"
  for k, v in string.gmatch(s, "(%w+)=(%w+)") do
    t[k] = v
  end

sample

values = {}
s = "name=hoge&age=22&country=ja"
for k,v in string.gmatch(s, "(%w+)=(%w+)") do
  values[k] = v
end
-- debug print
for k,v in pairs(values) do
  print(k.."="..v)
end
-->name=hoge
-->age=22
-->country=ja

link