0

我试图确定一个单词是否以元音、一个辅音、两个辅音或三个辅音开头。这是我到目前为止所拥有的,但我无法让它发挥作用。

  def vowel_first(word)
    word[0] =~ /[aeiou]/
  end

  def consonant_first_three(word)
    word[0-2] =~ /^[^aeiou]{3}/
  end

  def consonant_first_two(word)
    word[0-1] =~ /[^aeiou]{2}/
  end

  def consonant_first(word)
    word[0] =~ /[^aeiou]{1}/
  end
4

4 回答 4

3

这些破折号就像那些word[0-2]失败的破折号。尝试用..运算符替换它们(产生一个范围)。

于 2012-11-28T22:49:56.583 回答
0

您可以简单地检查单词开头的并发辅音数量:

leading_consonants = word.match(/^[^aeiou]{,3}/)[0].length

当它为零时,单词以非辅音开头。根据您的要求,这可能已经足够了;如果您必须考虑标点符号等,您可能需要更聪明一点:

matches = word.match(/^([aeiou]?)([^aeiou]{,3})/)
leading_vowel = matches && matches[1].length > 0 || false
leading_consonants = matches && matches[2].length || 0
于 2012-11-28T22:56:20.417 回答
0

这里的问题似乎是您对word之前比较的破坏。在这种情况下,0-1评估为-1“最后一个字符”。同样,word[0]指第一个字符,索引为零,并且 for"foo"将评估为"f".

您应该word按原样使用。正则表达式已正确锚定,只要您给它一些匹配的东西,它就应该可以工作。

需要注意的是,使用word.match(/.../)通常比word =~ /.../因为操作符是 Perl 的保留版本更具可读性,Perl 是一种从未因可读性而受到称赞的语言。

于 2012-11-28T22:49:19.700 回答
0

是导致问题的单词的大小写吗?尝试使用以下两个选项之一:

def vowel_first(word)
  word[0] =~ /[aeiouAEIOU]/
end

def vowel_first(word)
  word[0] =~ /[aeiou]/i
end

或者更好的是,您实际上并不需要提取字母,只需让正则表达式完成所有工作:

def vowel_first(word)
  word =~ /^[aeiou]/i
end
于 2012-11-28T22:54:56.117 回答