I just wrote a regex for use with the php function preg_match
that contains the following part:
[\\w-.]
To match any word char
In many regex implementations, the following rules apply:
Meta characters inside a character class are:
^
(negation)-
(range)]
(end of the class)\
(escape char)So these should all be escaped. There are some corner cases though:
-
needs no escaping if placed at the very start, or end of the class ([abc-]
or [-abc]
). In quite a few regex implementations, it also needs no escaping when placed directly after a range ([a-c-abc]
) or short-hand character class ([\w-abc]
). This is what you observed^
needs no escaping when it's not at the start of the class: [^a]
means any char except a
, and [a^]
matches either a
or ^
, which equals: [\^a]
]
needs no escaping if it's the only character in the class: []]
matches the char ]