Technically, that's not necessary.
You know that these things only change on save, so at that point you
look at the difference between the old aliases and the new and update
the master set. Computationally, it's only a smidgen more expensive than
our current approach. And given that we're such a read-heavy
environment, unnoticeably so.
Not using regular expressions, you can't. Regexps are good for telling
if a string matches a pattern, they aren't good for producing a list
of all strings that match a pattern (which could be infinitely long if
you allow arbitrary patterns). A much simplified version of regexps
could be used, but I'm not sure if it's worth it.