Regexes are a DSL available as sub language in many languages, and I'm confident most allow using lookahead assertions for and-combining regexes. Even in Java.
So it's not an exclusive Perl thing.
See this JS doc for instance:
Lookahead_assertion#pattern_subtraction_and_intersection¹
It's also worth discussing the pro and cons of the regex-sets solution posted by choroba.
The lookaheads are generic and not restricted to character classes and allow combining any kind of patterns.
But in the case of handling character classes only, I expect the regex-class solution to be faster and better readable.
¹) Using lookahead, you can match a string multiple times with different patterns, which allows you to express complex relationships like subtraction (is X but not Y) and intersection (is both X and Y). |