问题
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).
回答1:
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 buta
andb
). - 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]
ora
. - the caret can be placed anywhere but after the opening bracket, eg:
[a^]
matches^
ora
- the hyphen can be placed right after the opening bracket or before the closing bracket, eg:
[-a]
and[a-]
both matcha
and-
.
More information can be found in the man page on POSIX regex (thanks Tomalak Geret'kal!)
回答2:
From the documentation, right near the top:
This section summarizes, with examples, the special characters and constructs that can be used in MySQL for REGEXP operations. It does not contain all the details that can be found in Henry Spencer's regex(7) manual page. That manual page is included in MySQL source distributions, in the regex.7 file under the regex directory.
Said manpage can be found copied here (thanks, Google!). The information you're looking for is available in there.
来源:https://stackoverflow.com/questions/8141211/list-of-metacharacters-for-mysql-regexp-square-brackets