不以元音开头或结尾的单词的正则表达式?
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]$'
【讨论】:
以上是关于不以元音开头或结尾的单词的正则表达式?的主要内容,如果未能解决你的问题,请参考以下文章