Quote{(<?:X*>@@.):ph} (where X is the specific SP trunk)
In this context I'm not sure that the "?" is doing anything. {(<:X*>@@.):ph} or {(<X*>@@.):ph} which are effectively the same will prepend X* to all incoming CallerIDs.
The rules in the InboundCallRoute are processed from left to right. If you had {(<X*>@@.):ph} as your last but one rule, then it should match any CallerIds not matched by any of the preceding rules. The last rule should probably be {ph}, which will pick up any or no CallerID (anonymous) calls, unless you specifically want to ban anonymous calls.
Generally, in InboundCallRoutes "?" is used to match anonymous calls, that is calls with no CallerID. That use might change if it's placed within brackets () as it is now within a digit map. Very confusing!
I would need to do what RonR called "empirical testing" or "trial and error" as I call it
to be sure of any of the above. I will be busy over the next day or two, but may come back to it.