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:
- closing bracket
]
, for obvious reasons
- caret
^
, which is used to negate the character class (eg: [^ab]
matches any character but a
and b
).
- hyphen
-
, 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:
- the closing bracket can be placed right after the opening bracket, eg:
[]a]
matches ]
or a
.
- the caret can be placed anywhere but after the opening bracket, eg:
[a^]
matches ^
or a
- the hyphen can be placed right after the opening bracket or before the closing bracket, eg:
[-a]
and [a-]
both match a
and -
.
More information can be found in the man page on POSIX regex
(thanks Tomalak Geret'kal!)