The last time I was in your position, I used a product called jflex .
Java regex does not provide traditional O (N log M) performance guarantees for true regex engines (for input strings of length N and patterns of length M). Instead, it inherits exponential time from some perl roots for some patterns. Unfortunately, these pathological patterns, although rare in normal use, are too common when combining the regular expressions that you propose to do (I can confirm this from personal experience).
Therefore, my advice is as follows:
a) pre-compile your patterns as "static final Pattern" constants, so they will be initialized once during [cinit]; or
b) switch to a lexer package, for example jflex , which will provide a more declarative and much more readable syntax for approaching such cascading / sequential processing of regular expressions; and
c) seriously consider using a parser generator package. My current favorite is Beaver , but CUP is also a good option. Both of them are great tools, and I highly recommend them both, and since they both sit on top of jflex, you can add them as / when you need them.
If you have not used the parser generator and you are in a hurry, it will be easier for you to speed up with JavaCC . Not as much as Beaver / CUP, but its parsing model is easier to understand.
Whatever you do, do not use Antlr. This is very fashionable and it has great fans, but its online documentation is crap, its syntax is inconvenient, its performance is poor, and its design without a scanner makes some common simple cases painful to process. You would be better off using an abomination like sablecc (v1).
Note. Yes, I used everything that I mentioned above, and more than that; therefore, this advice comes from personal experience.