I don't think I'd special case `Regexp` in the `description`.  As far as I know, we don't do that in any of the other matchers.  If the user wants the description/failure message to say `a string matching...`, they can pass the `a_string_matching(/regexp/)` matcher rather than just using `/regexp/`).  As a full rspec matcher, it has an appropriate description.  OTOH, some users may find the `a string matching` bit to be unnecessary noise in the failure message, and they can use regexp rather than the matcher to get the slightly more terse failure message.  I think it still reads fine as a raw regexp.

Anyhow, once you do that, you can just use `"output #{description_of @expected}..."` -- no need for the case statement at all because `description_of` is smart about using the description vs. inspect.  In fact, I just realized a concrete bug with your case statement: non-aliased matchers will get their `inspect` output included in the description rather than their description.  User may define their own custom matchers that are already phrased appropriately to be passed as an arg, with no need to alias it.