有没有更好的方法在Ruby中编写以下正则表达式?第一个正则表达式匹配以(小写)辅音开头的字符串,第二个带有元音.
我试图弄清楚是否有一种方法可以编写与第二个表达式的负数相匹配的正则表达式,而不是使用多个范围编写第一个表达式.
string =~ /\A[b-df-hj-np-tv-z]/
string =~ /\A[aeiou]/
Run Code Online (Sandbox Code Playgroud)
Bor*_*din 11
该声明
$string =~ /\A[^aeiou]/
Run Code Online (Sandbox Code Playgroud)
将测试字符串是否以非元音字符开头,其中包括数字,标点符号,空格和控制字符.如果您事先知道字符串以字母开头,那就没关系了,但要检查它是否以辅音开头,您可以使用向前预测来测试它是以字母还是非元音开头的,就像这样
$string =~ /\A(?=[^aeiou])(?=[a-z])/i
Run Code Online (Sandbox Code Playgroud)
要匹配任意数量的辅音,您可以使用子表达式(?i:(?![aeiou])[a-z])来匹配辅音.它是原子的,所以你可以把重复计数放在{3}它之后.例如,该程序查找列表中包含连续三个辅音的所有字符串
list = %w/ aab bybt xeix axei AAsE SAEE eAAs xxsa Xxsr /
puts list.select { |word| word =~ /\A(?i:(?![aeiou])[a-z]){3}/ }
Run Code Online (Sandbox Code Playgroud)
产量
bybt
xxsa
Xxsr
Run Code Online (Sandbox Code Playgroud)