【问题标题】:mysql regex pattern matching [Weather Observation Station 11]mysql 正则表达式模式匹配[Weather Observation Station 11]
【发布时间】:2020-11-29 19:26:09
【问题描述】:

我在练习这个问题[Weather Observation Station 11] 当我使用

select distinct city
from station
where regexp_like(city, '^[^aeiou]|[^aeiou]$');

给了我正确的答案(458 个结果) 在哪里

select distinct city
from station
where not regexp_like(city, '^[aeiou]|[aeiou]$');

给了我错误的答案(299 个结果)。

我觉得'^[^aeiou]'NOT '^[aeiou]' 都应该给我一个不以 aeiou 结果开头的结果,但显然不是。这两个答案的逻辑区别是什么?

【问题讨论】:

  • @buddemat 那怎么样?这使您以元音开头或以元音结果结尾。
  • 对不起,我应该写更多的解释。我的观点与下面的答案相同,只是添加了括号以指出第二个是 OR 并且否定变为 AND。本来打算多写点的,但在公交车上突然意识到自己需要下车了。不管怎样,既然你得到了一个好的答案,我会删除我的 cmets 以避免混淆......
  • 你运行的是什么版本?我不知道regexp_like()
  • @RickJames 我在 HackerRank 上进行在线练习。所以可能与版本无关。 regexp_like() 在这里dev.mysql.com/doc/refman/8.0/en/…。我也是从这里的其他问题中学到的。
  • @Meruemu - 这是 8.0 的新功能。 (旧版本没有这个功能)。

标签: mysql regex


【解决方案1】:

它们看起来相同,但它们不同。

regexp_like(city, '^[^aeiou]|[^aeiou]$')

如果city 开始以辅音(非元音)结尾,这将返回匹配项。

但是:

not regexp_like(city, '^[aeiou]|[aeiou]$')

如果city 不以元音开头且不以元音结尾,则将返回匹配项 或者换句话说,如果 city 开始 AND 以辅音(非元音)结尾,它将返回匹配项。

注意 ORAND 在两个表达式中的不同之处,这将导致第一个表达式中的匹配比第二个表达式更多。

【讨论】:

    猜你喜欢
    • 2012-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多