$define SPE = "\u{fffe}" -- unused unicode character in Specials block $define SPF = "\u{ffff}" -- ditto local function tokenize(str, sep, esc) str = str:replace(esc .. esc, SPE):replace(esc .. sep, SPF) str = (str[-1] == esc) ? (str:sub(1, -2):replace(esc, "") .. esc) : (str:replace(esc, "")) return str:split(sep):map(|s| -> s:replace(SPE, esc):replace(SPF, sep)) end local str = "one^|uno||three^^^^|four^^^|^cuatro|" local sep = "|" local esc = "^" local items = tokenize(str, sep, esc) for items as item do print((item == "") ? "(empty)" : item) end