I remember a neat feature of re2 was you could give it a bunch of regex, and get it to check for all of them at the same time. Made all the difference in an early spam filter I built.
That's true, but mostly irrelevant in practice as you say. Because the NFA is linear in proportion to PATTERN size, not input size, and even an exponential blowup from there isn't a problem. (and many patterns may not blow up)
For example I wrote a very large set of regular languages to describe shell syntax. Compiling it all to a full DFA and then assembly via re2c creates something like 30 KiB of machine code. And it runs fast.
https://www.oilshell.org/release/0.8.5/source-code.wwz/_devb...
http://www.oilshell.org/blog/2020/01/parser-benchmarks.html
So as you say, you get the best of both worlds: a concise language, and speed. The only problem is the syntax, which I'm fixing: