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
ZnVuY3Rpb24gbXltYXRjaChzdHIpCiAgbG9jYWwgXywgXywgb2ssIG9yZXZlYWwgPSBzdHI6ZmluZCgiXihvayVmWyVBXSk7PyguKikkIikKICBpZiBvayA9PSBuaWwgdGhlbgogIAlfLCBfLCBvaywgb3JldmVhbCA9IHN0cjpmaW5kKCJeKGNhbmNlbCVmWyVBXSk7PyguKikkIikKICBlbmQKICBpZiBvcmV2ZWFsID09ICIiIHRoZW4KICAJb3JldmVhbCA9IG5pbAogIGVuZAogIHJldHVybiBvaywgb3JldmVhbAplbmQKCi0tIHRoaXMgaXMgd2hhdCBJIHdhbnQKcHJpbnQobXltYXRjaCgib2siKSkgLS0gb2sgbmlsCnByaW50KG15bWF0Y2goImNhbmNlbCIpKSAtLSBjYW5jZWwgbmlsCnByaW50KG15bWF0Y2goIm9rO2RvbWF0Y2giKSkgLS0gb2sgZG9tYXRjaApwcmludChteW1hdGNoKCJva2RvbnRtYXRjaCIpKSAtLSBuaWwgbmls