return function(str, delim, include_empty, max_splits, sep_is_pattern) delim = delim or "," max_splits = max_splits or -2 local items = {} local pos, len = 1, #str local plain = not sep_is_pattern max_splits = max_splits + 1 repeat local np, npe = string.find(str, delim, pos, plain) np, npe = (np or (len+1)), (npe or (len+1)) if (not np) or (max_splits == 1) then np = len + 1 npe = np end local s = string.sub(str, pos, np - 1) if include_empty or (s ~= "") then max_splits = max_splits - 1 items[#items + 1] = s end pos = npe + 1 until (max_splits == 0) or (pos > (len + 1)) return items end