【发布时间】:2015-07-31 16:34:37
【问题描述】:
我尝试运行此查询:
SELECT column FROM table WHERE column REGEXP '[^A-Za-z\-\']'
但这会返回
#1139 - 从正则表达式中得到错误“无效字符范围”
在我看来,字符类中的 - 没有被转义,而是被读取为无效范围。是否有其他方式可以让 mysql 转义为文字 -?
这个正则表达式在 mysql 之外按预期工作,https://regex101.com/r/wE8vY5/1。
我想出了一个替代正则表达式的方法
SELECT column FROM table WHERE column NOT REGEXP '([:alpha:]|-|\')'
所以问题不在于我如何让它发挥作用。问题是为什么第一个正则表达式不起作用?
这是问题的 SQL 小提琴,http://sqlfiddle.com/#!9/f8a006/1。
此外,这里没有使用任何语言,查询正在数据库级别运行。
PHP 中的正则表达式:http://sandbox.onlinephpfunctions.com/code/10f5fe2939bdbbbebcc986c171a97c0d63d06e55
JS 中的正则表达式:https://jsfiddle.net/6ay4zmrb/
【问题讨论】:
-
这实际上在 MySQL 8 中有效,但在 5.7 中无效