MySQL正则表达式-不以元音开头或结尾

时间:2019-07-07 07:27:44

标签: mysql regex

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

我尝试提交此答案:

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

我知道此答案有效(受此very similar question的启发):

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中编写一个正则表达式时,都会产生一种怀疑的想法:“这是其中之一吗? '。理想情况下,我正在寻找一个可以消除这种怀疑的地方。尤其是因为对Google而言是如此困难,因为正则表达式的标点符号非常繁琐。

3 个答案:

答案 0 :(得分:2)

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

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

我假设城市名称将始终至少包含两个字符。请注意,REGEXP不区分大小写。

答案 1 :(得分:1)

从车站选择不同的城市,而不是城市正则表达式'^[aeiou].*[aeiou]$'; 这是hackerrank天气问题11的正确解决方案。

问题 12 要求 AND,而问题 11 要求 OR

请尝试两者。

答案 2 :(得分:0)

气象观测站 12 题要求不以元音开头的城市 AND 不以元音结尾。 通过编写单个正则表达式,例如 从车站选择不同城市 WHERE CITY NOT REGEXP '^[aeiouAEIOU].*[aeiouAEIOU]$'

像“Alabama”这样的城市的情况会被处理,但它仍然会输出像“Lee”或“Charlotte”这样的城市,它们要么以OR开头,要么以元音结尾。

这就是它必须明确写成的原因 从车站选择不同城市 城市不喜欢'^[aeiouAEIOU]'和城市不喜欢'[aeiouAEIOU]$'

另外仅供参考,气象观测站 11 问题接受单个正则表达式,因为它要求 OR