Doesn't it seem as if those five conditions should be collapsible into one, with the aid of a few more pipes and brackets? When you look at it with human eyeballs and human brain, they all reduce to "punctuation in the wrong place".
:: detour to multi-file search in TextWrangler ::
You wouldn't think " )" could ever occur in a legitimate human UA, but there's a fair number of them. I tried
200 .+? \)..+"
to filter out known bad bots and to constrain the search to non-final " )" (they're fairly common at the end of a UA string).
On the other hand, I can't find any legitimate "( " (space after opening parenthesis). Some 200s, but on closer inspection they're all robots or hotlinkers.
You can definitely collapse this pair:
\)\ \)
and
\)\ ;[\ ]
become
\)\ (;\ |\))
and, as a bonus, it gets rid of that vexing Trailing Space Issue :)
This one
;\ [\ ]
could also be expressed as
;\ {2,}
though you don't actually save any bytes, and may be putting the server to more work, so scratch that unless the form is easier for you to internalize.
As an alternative,
\ ;[\ ]
and
;\ [\ ]
are
(;\ |\ ;)[\ ]
though again this isn't much of a gain unless you're really trying to conserve line breaks.
Dang. Where's the RewriteCond that says
%{ANY-ELEMENT-OF-REQUEST} fishy-punctuation
?