Strangely I can't seem to find anywhere a list of the characters that I can't safely use as literals within MySQL regular expression square brackets without escaping them or requiring the use of a [:character_class:] thing.
(Also the answer probably needs to be MySQL specific because MySQL regular expressions seem to be lacking compared those in Perl/PHP/Javascript etc).
Almost all metacharacters (including the dot
., the+,*and?quantifiers, the end-of-string anchor$, etc.) have no special meaning in character classes, with a few notable exceptions:], for obvious reasons^, which is used to negate the character class (eg:[^ab]matches any character butaandb).-, which is used to denote a range (eg:[0-9]matches any digit)However, these can still be added without escaping if placed in strategic locations within the character class:
[]a]matches]ora.[a^]matches^ora[-a]and[a-]both matchaand-.More information can be found in the man page on POSIX
regex(thanks Tomalak Geret'kal!)