我有正则表达式的问题。我想只匹配这些只包含元音或辅音的单词。
例如我有这样的字符串:
aeyiuo
aeYYuo
qrcbk
aeeeee
normal
Text
extTT
我的正则表达式应匹配:aeyiuo aeYYuo aeeeee
我不知道为什么我的表达不起作用^[aeyiuo]*|[^aeyiuo]*$
要检查我的正则表达式,我使用在线解析器:http://www.regexr.com/或http://regexpal.com/
如果有人能解释我的错误,我将非常感激。
答案 0 :(得分:12)
如果你想只用元音匹配线条,那么你只需要考虑一个字符类[]
。
我们应该添加什么?元音! [aeiouy]
。
我们需要它一次或多次,所以让我们为它添加一个加号[aeiouy]+
我们还需要锚定它^[aeiouy]+$
现在让我们谈谈修饰符,我们需要i
修饰符来匹配不区分大小写。我们还需要m
修饰符,以便^
和$
分别匹配行的开头和行尾。另外,请不要忘记g
修饰符,在某些引擎中,您需要它来匹配所有出现的内容。
答案 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]*$
匹配(注意第一个表达式中没有$,第二个表达式中没有^)。
您有两种选择:
在两个表达式周围添加括号:
^([aeyiuo]*|[^aeyiuo]*)$
将^和$添加到两个表达式
^[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])