The dash between the post id and post name is probably screwing things up since it is not an optional match. Try adding a question mark after that dash. Like this:
?([0-9]+)?-?([0-9a-z-]+)?([0-9]+)?/?$
That might mess up the title matching, however, since the title can have dashes. I don't have time to think it through right now, but I'll try it out when I return home in the evening. Let us know how it goes.