正则表达式无效字符长度

时间:2019-09-04 12:46:26

标签: mysql sql

此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_-\(]'

2 个答案:

答案 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_\\(-]'