Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 使用Regexp检查字符串是否以辅音开头_Ruby_Regex - Fatal编程技术网

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

Ruby 使用Regexp检查字符串是否以辅音开头,ruby,regex,Ruby,Regex,有没有更好的方法用Ruby编写下面的正则表达式?第一个正则表达式匹配以(小写)辅音开头的字符串,第二个正则表达式匹配以元音开头的字符串 我试图找出是否有一种方法可以编写与第二个表达式的负数相匹配的正则表达式,而不是编写具有多个范围的第一个表达式 string =~ /\A[b-df-hj-np-tv-z]/ string =~ /\A[aeiou]/ 声明 $string =~ /\A[^aeiou]/ 将测试字符串是否以非元音字符开头,其中包括数字、标点符号、空格和控制字符。如果您事先知道

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

我试图找出是否有一种方法可以编写与第二个表达式的负数相匹配的正则表达式,而不是编写具有多个范围的第一个表达式

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

$string =~ /\A[^aeiou]/
将测试字符串是否以非元音字符开头,其中包括数字、标点符号、空格和控制字符。如果您事先知道字符串以字母开头,那么这很好,但是要检查它是否以辅音开头,您可以使用“向前看”来测试它是否以字母和非元音开头,如下所示

$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

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

  if /^[^aeiou\W]/i.match(s) == nil
    return false
  else
    return true
  end
i添加到末尾,使正则表达式不区分大小写

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

[^aeiou]表示除外的字符范围


我们将^放在[之前的开头,以表明以下范围[^aeiou\W]如果是第一个字符

我修改了@Alexander Cherednichenko提供的答案,以便去掉if语句

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

谢谢,这也很有帮助!您如何匹配多个字符?例如,如果您想查找前3个字母是否为辅音,并在表达式后面加上{3}号?@EMK428:我很抱歉-我使用了Perl!我修改了我的答案,以显示如何匹配“辅音”子表达式的重复计数。