不以元音开头或结尾的单词的正则表达式?

Posted

技术标签:

【中文标题】不以元音开头或结尾的单词的正则表达式?【英文标题】:Regular expression for words not starting or ending with vowels? 【发布时间】:2015-12-16 00:53:20 【问题描述】:

我使用了这个正则表达式:^[aeiou](\w|\s)*[aeiou]$ 对于以元音开头和结尾的单词,效果很好。

但是当我使用这个正则表达式时: ^[^aeiou](\w|\s)*[^aeiou]$ 对于不以元音开头和结尾的单词,它不起作用。你能告诉我我的第二个正则表达式有什么问题吗?

单词就像: 南不列颠 里弗斯交界处 雀斑 绍斯波特 康普顿 林登 塞奇威克 休斯顿 塞勒 黑豹燃烧

【问题讨论】:

您的正则表达式引擎是否不区分大小写? [A] != [a] 是的,我已经应用了不区分大小写的修饰符 这些对我有用。你能发布你用来测试这些的代码吗?什么语言? 其实我正在尝试解决这个问题:hackerrank.com/challenges/weather-observation-station-11 我正在运行这个基于 oracle 的查询 select distinct(city) from station where regexp_like(city, '^[^aeiou](\w|\s)*[^aeiou]$', 'i'); 【参考方案1】:
select distinct(city) from station
  WHERE regexp_like(city, '^[^aeiou](\w|\s)*$', 'i')
    OR regexp_like(city, '^(\w|\s)*[^aeiou]$', 'i');

问题是问“以 OR 开头”,您可以在正则表达式中执行此操作,但我在 WHERE 子句中将其作为 OR 执行

【讨论】:

我用过这个:^([^aeiou](\w|\s)*)|((\w|\s)*[^aeiou])$ 那行得通。我试图让它在 regexr.com 中工作,但我认为你必须在 $ 之前考虑一个 \r 字符,它变得很乱。【参考方案2】:

如果我理解所需的逻辑并且你碰巧想要一个正则表达式,我会使用类似!/(^[aeiou](\w|\s)*)|((\w|\s)*[aeiou]$)/i 的东西。当然,这不是最易读的格式,但应该只抓取那些以非元音开头和结尾的单词。

【讨论】:

@Antara Roy -- 我刚刚看到你对 bradlis7 的评论,你采取了类似的方法。【参考方案3】:

迟到了,但如果是 mysql,这对我有用:

SELECT DISTINCT CITY FROM STATION 
WHERE NOT REGEXP_LIKE(CITY,'[aeiou]$','i') 
OR NOT REGEXP_LIKE(CITY, '^[aeiou]','i');

【讨论】:

【参考方案4】:

简单易读的解决方案

SELECT DISTINCT city
FROM station
WHERE city NOT REGEXP '^[aeiou]' AND city NOT REGEXP '[aeiou]$'

【讨论】:

以上是关于不以元音开头或结尾的单词的正则表达式?的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式匹配空间不以 char 开头/结尾

C ++ 11正则表达式匹配一个不以句点结尾的完整单词?

正则表达式中以啥开头啥结尾怎么写

正则表达式 - 以特定字符串开头但不以另一个子字符串结尾

js正则表达式过滤以指定字符开头以指定字符结尾的文本内容

正则表达式:如何匹配不以前缀列表开头的子字符串