I wrote a script that takes "regexp:string" pairs (one per line) and converts the regexps to re2c format [*] and builds an XS module out of them. I managed to match 10k regexps against 10k strings in 0.3s with it, which I think is fairly good.
Here's the code. Please feel free to play with it and let me know if it's useful - particularly if you can patch it to support more of the Perl regexp format.
You need a recent re2c to make it work. And don't expect your XS module to compile quickly if you have a lot of regexps. The 10k regexp test took over 3 hours to compile on my Core Duo 2Ghz.
[*] re2c uses an entirely different format for regexps than perl does. So the core of re2xs is a regexp parser which converts to this other format.