lua-users home
lua-l archive

Re: extension to string.gmatch (structural regular expressions)

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


 > Here's a first attempt at a splitting gmatch: [quoted below]
Not bad but I think you return the extra position matched by the
final (). Mostly harmless.
You can also ditch the coroutines and simply do
 return function() return aux(gm()) end
Norman
 > function string.gmatchsplit(text, pattern)
 > local gm = text:gmatch("()" .. pattern .. "()")
 > local start = 1
 > local function aux(...)
 > if start == nil then
 > return nil
 > end
 > local caps = select('#', ...)
 > if caps == 0 then
 > local finalpart = text:sub(start)
 > start = nil
 > return finalpart
 > end
 > local stop = (...) - 1
 > local before = text:sub(start,stop)
 > start = select(caps, ...)
 > return before, select(2, ...)
 > end
 > return coroutine.wrap(
 > function()
 > while true do
 > coroutine.yield( aux(gm()) )
 > end
 > end
 > )
 > end
 > 
 > for part in string.gmatchsplit("one<delim>two<delim>three", "<delim>") do
 > print(part)
 > end

AltStyle によって変換されたページ (->オリジナル) /