function mymatch(str) local _, _, ok, oreveal = str:find("^(ok%f[%A]);?(.*)$") if ok == nil then _, _, ok, oreveal = str:find("^(cancel%f[%A]);?(.*)$") end if oreveal == "" then oreveal = nil end return ok, oreveal end -- this is what I want print(mymatch("ok")) -- ok nil print(mymatch("cancel")) -- cancel nil print(mymatch("ok;domatch")) -- ok domatch print(mymatch("okdontmatch")) -- nil nil