使用Regexp检查字符串是否以辅音开头

有没有更好的方法在Ruby中编写以下正则表达式? 第一个正则表达式匹配以(小写)辅音开头的字符串,第二个正则表达式用元音。

我试图弄清楚是否有一种方法可以编写与第二个表达式的负数相匹配的正则表达式,而不是使用多个范围编写第一个表达式。

string =~ /\A[b-df-hj-np-tv-z]/ string =~ /\A[aeiou]/ 

该声明

 $string =~ /\A[^aeiou]/ 

将测试字符串是否以非元音字符开头 ,其中包括数字,标点符号,空格和控制字符。 如果事先知道字符串以字母开头,那就没关系了,但要检查它是否以辅音开头,你可以使用向前预测来测试它是以字母还是非元音开头的,就像这样

 $string =~ /\A(?=[^aeiou])(?=[az])/i 

要匹配任意数量的辅音,您可以使用子表达式(?i:(?![aeiou])[az])来匹配辅音。 它是primefaces的,所以你可以在它之后加上{3}类的重复计数。 例如,该程序查找列表中包含连续三个辅音的所有字符串

 list = %w/ aab bybt xeix axei AAsE SAEE eAAs xxsa Xxsr / puts list.select { |word| word =~ /\A(?i:(?![aeiou])[az]){3}/ } 

产量

 bybt xxsa Xxsr 

我修改了@Alexander Cherednichenko提供的答案,以便摆脱if语句。

 /^[^aeiou\W]/i.match(s) != nil 

如果你想捕获一个不以元音开头但只用辅音开头的字符串,你可以使用下面的代码。 如果一个字符串以A,E,I,O,U以外的任何字母开头,则返回true。s是我们给函数的任何字符串

  if /^[^aeiou\W]/i.match(s) == nil return false else return true end 

我最后添加了使正则表达式不区分大小写。

\ W用于捕获任何非单词字符,例如,如果字符串以如下数字开头:“1something”

[^ aeiou]表示除了aeiou之外的一系列字符

并且我们在^之前放置^ [表示以下范围[^ aeiou \ W]是否为第1个字符