为什么这个正则表达式只忽略元音?

时间:2018-03-04 23:11:54

标签: regex expression

我的问题是这个正则表达式的逻辑是什么,所以它不能从单词中选择元音?

这是正则表达式:

^[AEIOUaeiou]+|[AEIOUaeiou]+$|[^AEIOUaeiou]

示例文字

  不得不为此感叹,并希望不可能的事情,直到她的父亲醒来,并使其变得愉快。他的精神需要支持。他是一个紧张的人,容易沮丧;喜欢他习惯的每一个身体,并且讨厌与他们分开;讨厌各种变化。婚姻,作为变革的起源,

正则表达式结果

  

cld nt bt sgh vr t,nd wsh fr mpssbl thngs,tll hr fthr wk,nd md t ncssry t b> chrfl.Hs sprts rqrd spprt。 H ws nrvs mn,sly dprssd; fnd f vry bdy tht h> ws sd t,nd htng t prt thth; htng chng f vry knd。 Mtrmny,s rgn f chng

我的重点是“上述REGEX的哪一部分否定了名词的选择”

2 个答案:

答案 0 :(得分:1)

你的正则表达式并不否定名词的选择,而只是根据元音进行匹配。

具体来说,正则表达式运行OR|)条件,检查三个部分中的任何一个:

  • ^[AEIOUaeiou]+ - 检查字符串是否以一个或多个元音开始
  • [AEIOUaeiou]+$ - 使用一个或多个元音检查字符串是否结束
  • [^AEIOUaeiou] - 检查字符串是否包含元音的内容

基本上说,如果字符串在开头或结尾包含元音,它将返回匹配...如果字符串包含其他而不是元音(包括特殊字符)。

答案 1 :(得分:0)

你的正则表达式匹配:

^                     Start of line
[AEIOUaeiou]+         1-n times any of the characters in []

|               OR

[AEIOUaeiou]+         1-n times any on the characters in []
$                     End of line

|               OR

[^AEIOUaeiou]         1 occurence of not any of those in []

regexr将是:https://regexr.com/3lm0k

基本上,你为最后一部分获得了大量的匹配(385)而第一部分没有匹配,因为你的字符串以c开头并以.结束