mysql - 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 中编写正则表达式时,都会产生怀疑的种子:“这是不同的东西之一吗?”。理想情况下,我正在寻找一个可以消除这种怀疑的地方。尤其是因为它对谷歌来说太难了,因为正则表达式的标点符号太重了。
解决方案
使用[^aeiou]
字符类来表示非元音字符:
SELECT DISTINCT CITY
FROM STATION
WHERE CITY REGEXP '^[^aeiou].*[^aeiou]$';
我假设一个城市名称总是至少有两个字符。请注意,REGEXP
不区分大小写。
推荐阅读
- java - Selenium 元素点击因页脚而被拦截
- php - 测试调用抛出异常的构造函数的静态工厂方法
- tcp - ESP8266 NodeMCU 无法发送 TCP 命令 - 相同的代码适用于 Arduino Uno?
- javascript - 如何将两个数组中的对象映射为一个?
- gradle - gradle 无法解析项目
- html - 如何让我的 css 边框环绕我的 html 代码?
- r - 如何在函数中优化 case_when?
- electron - 我应该将 Electron 安装为依赖项还是 devDependency 以进行分发?
- oracle - ORA-29024: 证书验证失败?
- r - 如何折叠行以填充每列行数奇数的组中的 NA?