此MySQL查询有效:
SELECT p.slug FROM products AS p
WHERE p.slug REGEXP '[^a-zA-Z0-9_-]'
但是这个不起作用:
SELECT p.slug FROM products AS p
WHERE p.slug REGEXP '[^a-zA-Z0-9_-(]'
这都不起作用:
SELECT p.slug FROM products AS p
WHERE p.slug REGEXP '[^a-zA-Z0-9_-\(]'
答案 0 :(得分:4)
您需要使用\\
来转义该特殊字符
SELECT p.slug FROM products AS p WHERE p.slug REGEXP '[^a-zA-Z0-9_-\\(]'
作为参考,请阅读 doc
编辑:使用
\\
转义表达式中的任何特殊字符。就像上面的查询-
是特殊字符一样。
答案 1 :(得分:2)
您需要用双反斜杠(\\
)escape special characters (parentheses and dash):
SELECT p.slug FROM products AS p
WHERE p.slug REGEXP '[^a-zA-Z0-9_\\-\\(]'
破折号不需要在开头或结尾处转义,因为否则它将被解释为范围的一部分(例如a-z
):
'[^a-zA-Z0-9_\\(-]'