You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL REGEXP无法筛选既不以元音开头也不以元音结尾的城市问题

问题分析与解决

你的SQL语句逻辑完全搞反了——当前的正则^[AEIOU].*[AEIOU]$是用来匹配以元音开头且以元音结尾的城市,和你要查询的“既不以元音开头也不以元音结尾”正好相反,这就是你得到错误结果的核心原因。

另外,原语句还存在大小写匹配的漏洞:如果城市名包含小写元音(比如arlington),原正则要么漏掉这类情况,要么在数据库默认不区分大小写的环境下,错误匹配不符合要求的条目。你提到的Arlinton结尾是n(非元音)却被返回,大概率是数据库REGEXP默认不区分大小写,且原正则的结尾匹配逻辑未正确生效,但核心问题仍是逻辑颠倒。

正确的SQL语句

要匹配既不以元音开头也不以元音结尾的城市,应该使用排除类正则:

SELECT DISTINCT CITY FROM STATION
WHERE CITY REGEXP '^[^AEIOUaeiou].*[^AEIOUaeiou]$'

正则各部分解释:

  • ^[^AEIOUaeiou]:^表示字符串开头,[^...]是排除类字符集,限制开头不能是大小写的A/E/I/O/U
  • .*:匹配任意长度的任意字符(城市名至少有1个字符,所以不影响结果)
  • [^AEIOUaeiou]$:$表示字符串结尾,同样用排除类字符集限制结尾不能是大小写元音

如果你的数据库支持正则修饰符(比如MySQL的REGEXP BINARY),也可以用简化写法:

SELECT DISTINCT CITY FROM STATION
WHERE CITY REGEXP BINARY '^[^AEIOU].*[^AEIOU]$'

BINARY修饰符会让匹配区分大小写,此时[^AEIOU]会自动排除大小写元音字符。

内容的提问来源于stack exchange,提问作者NiMa03

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 04:55:05