When I need it, I tend to forget how to create a regular expression that matches a large set of strings but does not match some specific strings. It's tricky because it involves the negative lookahead syntax.
For exemple the regexp
matches any java filename.
But the following regexp
matches any java filename except Foo.java because the negative lookahead of Foo\.java will prevent .+\.java from matching.
The negative lookahead syntax is
(?!X) where X is the string that must not be matched.