有没有更好的方法在Ruby中编写以下正则表达式?第一个正则表达式匹配一个以(小写)辅音开头的字符串,第二个正则表达式用元音。
我正在试图弄清楚是否有办法编写与第二个表达式的负数相匹配的正则表达式,而不是将第一个表达式写成多个范围。
string =~ /\A[b-df-hj-np-tv-z]/
string =~ /\A[aeiou]/
答案 0 :(得分:11)
声明
$string =~ /\A[^aeiou]/
将测试字符串是否以非元音字符开头,其中包括数字,标点符号,空格和控制字符。如果你事先知道字符串以字母开头,那就没关系了,但要检查它是否以辅音开头,你可以使用前瞻性来测试它是以字母和非字母开头的-vowel,像这样
$string =~ /\A(?=[^aeiou])(?=[a-z])/i
要匹配任意数量的辅音,您可以使用子表达式(?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}/ }
<强>输出强>
bybt
xxsa
Xxsr
答案 1 :(得分:3)
我修改了@Alexander Cherednichenko提供的答案,以便摆脱if语句。
/^[^aeiou\W]/i.match(s) != nil
答案 2 :(得分:2)
如果你想捕捉一个不以元音开头的字符串,但只能从辅音开始,你可以使用下面的代码。如果字符串以A,E,I,O,U以外的任何字母开头,则返回true。 s 是我们为函数提供的任何字符串
if /^[^aeiou\W]/i.match(s) == nil
return false
else
return true
end
最后添加i 以使正则表达式不区分大小写。
\ W 用于捕获任何非单词字符,例如,如果字符串以如下数字开头:&#34; 1something&#34;
[^ aeiou] 表示除 a e i o u
以外的一系列字符我们将 ^ 放在 [之前的开头,表示以下范围 [^ aeiou \ W] ,如果是第1个字符