首页 > 解决方案 > MySQL正则表达式 - 不以元音开头也不以元音结尾

问题描述

我在这里玩这个挑战:Weather Observation Station 12

我尝试提交这个答案:

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

我知道这个答案有效(受这个非常相似的问题的启发):

SELECT DISTINCT CITY FROM STATION
WHERE CITY NOT RLIKE '^[aeiouAEIOU]' AND CITY NOT RLIKE '[aeiouAEIOU]$'

...但我无法用一个正则表达式写出一个可接受的答案。谁能解释为什么?


它搜索的内容

正如评论者指出的那样,上面写的页面需要登录。因此,为了采取良好的措施,我将在此处添加它在 500 个城市名称中进行搜索,例如(每个在数据库中各自的行中):

Kissee Mills, Loma Mar, Sandy Hook, Tipton, Arlington, Turner, Slidell, Negreet, Glencoe, Chelsea, Chignik Lagoon, Pelahatchie, Hanna City, Dorrance, Albany, Monument, Manchester, Prescott, Graettinger, Cahone, Sturgis, Upperco, Highwood, Waipahu, Bowdon, Tyler, Watkins, Republic, Millville, Aguanga, Bowdon Junction, Morenci, South El Monte 

正则表达式之间的差异

而且我听说从一种语言到另一种语言(PHP、JavaScript、Perl、MySQL、Ruby 等)的正则表达式存在一些细微差别。但我找不到解释这些差异的页面。我可以坐下来阅读每种语言的文档并交叉引用它,但是没有一个地方可以对其进行总结吗?

另外:我来自 PHP 世界,每次我在 MySQL 中编写正则表达式时,都会产生怀疑的种子:“这是不同的东西之一吗?”。理想情况下,我正在寻找一个可以消除这种怀疑的地方。尤其是因为它对谷歌来说太难了,因为正则表达式的标点符号太重了。

标签: mysqlregex

解决方案


使用[^aeiou]字符类来表示非元音字符:

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

我假设一个城市名称总是至少有两个字符。请注意,REGEXP不区分大小写。


推荐阅读