If you can come up with a regex/NFA/whatever for a mahjong hand that isn't just a union of all strings, let me know, because it seems impossible. The limitation of no more than 4 copies of each tile makes something like
([1-9](m|p|s))|([1-7]z)
repeated 14 times not work, because it can't keep track of how many of each tile there are.