The problem is [a-ZA-z], which should be [a-zA-Z]. Think of ranges of character as their ASCII values. Saying [a-z] is like saying (pseudocode):
Code:
if ( char >= ascii('a') && char <= ascii('z') ...
Plugging in the ASCII values, saying [a-Z] would work out as:
Code:
if ( char >= 97 && char <= 90 ) ...
which you should be able to see doesn't make sense - it can never be true. The regexp engine checks for apparent errors like this, and gives an error when it finds one.