正则表达式 - 匹配仅包含元音或辅音的世界

时间:2014-03-18 11:48:43

标签: regex

我有正则表达式的问题。我想只匹配这些只包含元音或辅音的单词。

例如我有这样的字符串:

aeyiuo 
aeYYuo 
qrcbk 
aeeeee 
normal 
Text 
extTT 

我的正则表达式应匹配:aeyiuo aeYYuo aeeeee

我不知道为什么我的表达不起作用^[aeyiuo]*|[^aeyiuo]*$ 要检查我的正则表达式,我使用在线解析器:http://www.regexr.com/http://regexpal.com/

如果有人能解释我的错误,我将非常感激。

6 个答案:

答案 0 :(得分:12)

如果你想只用元音匹配线条,那么你只需要考虑一个字符类[]
我们应该添加什么?元音! [aeiouy]
我们需要它一次或多次,所以让我们为它添加一个加号[aeiouy]+ 我们还需要锚定它^[aeiouy]+$ 现在让我们谈谈修饰符,我们需要i修饰符来匹配不区分大小写。我们还需要m修饰符,以便^$分别匹配行的开头和行尾。另外,请不要忘记g修饰符,在某些引擎中,您需要它来匹配所有出现的内容。

Online demo

答案 1 :(得分:2)

为简化原因,为什么不检查两个不同的表达式?

^[aeyiuo]+$仅限元音

^[^aeyiuo]+$仅限辅音。

除非您的要求是仅使用一个正则表达式。检查区分大小写或不敏感。

答案 2 :(得分:0)

如果您只想要元音aeiyou,请尝试:\b[aeiyou]+\b

只有辅音(或任何其他非元音字符)才会是:\b[^\b\saeiyou]+\b

所以你得到:\b[aeiyou]+\b|\b[^\b\saeiyou]+\b

匹配:aeyiuo aeYYuo qrcbk aeeeee

它与qrcbk相匹配,与你的例子相反。

我希望我没有误会......

答案 3 :(得分:0)

你的正则表达式现在检查它是否与^[aeyiuo]*[^aeyiuo]*$匹配(注意第一个表达式中没有$,第二个表达式中没有^)。

您有两种选择:

  1. 在两个表达式周围添加括号:

    ^([aeyiuo]*|[^aeyiuo]*)$

  2. 将^和$添加到两个表达式

    ^[aeyiuo]*$|^[^aeyiuo]*$

答案 4 :(得分:0)

if([^ aeiou])// False,则只有元音 if([^ b-df-hj-np-tv-z])// False,那么只有辅音

答案 5 :(得分:0)

回答^([^aeiouyAEIOUY0-9\W]+)$|^([aeiouyAEIOUY]+)$

  

解释:从字符串^的开头开始,任何非[^元音,数字,   非单词字符\W] 注意双重否定发生一次   或者更多连续+到字符串$|的末尾   字符串^的开头是连续出现一次或多次的元音+   到字符串$

的末尾

如果这有助于任何= D

将其分解:

  

元音分组:([aeiouyAEIOUY]+)   
  辅音分组:([^aeiouyAEIOUY0-9\W]+)   
  仅元音字符串:^([aeiouyAEIOUY]+)$   
  仅辅音字符串:^([^aeiouyAEIOUY0-9\W]+)$

     与上述相同的

仅分组:
  只有元音或辅音只有字符串:(^([^aeiouyAEIOUY0-9\W]+)$|^([aeiouyAEIOUY]+))$)   

加成:

  

辅音包括y如果后跟元音:(y(?=[aeiouAEIOU]))|([^aeiouAEIOU0-9\W])