为什么正则表达式setminus运算符不适用于MySQL?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么正则表达式setminus运算符不适用于MySQL?相关的知识,希望对你有一定的参考价值。

我试图使用带有正则表达式的setminus运算符选择表中没有元音的所有客户端名称(因此应该返回一个空列表),但它只是返回整个列。如果我尝试选择没有'a'或'e'或任何其他元音的所有客户名称,也会发生同样的情况。

这是我正在使用的查询:

select client_name from client

where client_name regexp '[^aeiou]';

如果我尝试做下面这样的条件,那么内部插入符确实会占用除'a'之外的每个字符。我不知道为什么它本身不起作用。

select client_name from client

where client_name regexp '^[^a]'

预期 - 空输出

实际结果 - 返回整列

答案

正则表达式可以匹配名称中的任何位置。因此它将匹配任何具有任何非元音字符的名称,而不是所有字符都不是元音的名称。你需要锚定它并量化它:

WHERE client_name REGEXP '^[^aeiou]*$'

这将测试名称中的所有字符。

或者你可以否定测试:

WHERE client_name NOT REGEXP '[aeiou]'

正则表达式匹配名称中任何位置的元音。然后使用NOT使其返回不匹配的名称。

以上是关于为什么正则表达式setminus运算符不适用于MySQL?的主要内容,如果未能解决你的问题,请参考以下文章

Python 正则表达式不适用于 Gmail 正文

正则表达式排除非 golang 文件不适用于 inotifywait

ASP.NET MVC 正则表达式属性不适用于括号(文字)

有效的 RegEx 不适用于 ASP.Net MVC 正则表达式属性

bash 完成不适用于 MSYS bash。正则表达式语法错误

正则表达式验证规则,以避免特殊字符不适用于 laravel 中的文本字段