There are some discussions here, and utility functions, for splitting strings, but I need an ad-hoc one-liner for a very simple task.
I have the following string:
local s = "one;two;;four"
And I want to split it on ";"
. I want, eventually, go get { "one", "two", "", "four" }
in return.
So I tried to do:
local s = "one;two;;four"
local words = {}
for w in s:gmatch("([^;]*)") do table.insert(words, w) end
But the result (the words
table) is { "one", "", "two", "", "", "four", "" }
. That's certainly not what I want.
Now, as I remarked, there are some discussions here on splitting strings, but they have "lengthy" functions in them and I need something succinct. I need this code for a program where I show the merit of Lua, and if I add a lengthy function to do something so trivial it would go against me.
[^;]*
is perfectly happy matching zero semicolons. So lua matches zero semicolons each time it gets to a delimiter. You can use "[^;]+" instead for a slightly better result but there are reasons the lua-users.org/wiki/SplitJoin page of the lua-users wiki runs as long as it does when talking about splitting strings. – Gist