正则表达式和字符方法用法。如何改善这个正则表达式

时间:2014-11-11 01:04:11

标签: regex

  @input = "rrgb"
  def is_letters?
    @input.chars.all? {|letter| letter == /[a..zA..Z]/}
  end

  def right_letters?
    @input.chars.all? {|letter| letter =~ (/[rgbyrp]/)}
  end

那么#right_letters?将返回true,因为它将返回一个trues数组:[true,true,true,true]。 0是真的,所以它会返回一个真实的数组?

#is_letters?会回归一系列的堕落吗?我不能在那里使用==如果我希望这行代表“这封信是小写字母或大写字母”。

是否有更好的编码方式“这封信是以下字母之一:r,g,b,y,r,p

1 个答案:

答案 0 :(得分:1)

这真是一个关于Ruby的问题,并且all?并不像你认为的那样工作 - 如果块返回false y值,它只会返回false ,和true否则。

对你的问题,是的。你错过的是正则表达式在整个字符串上运行,你不必一次做一个字符。所以:

@input = "rrgb"
def is_letters?
  ! @input.match /[^a-z]/i
end

def right_letters?
  @input.match /[rgbyrp]/
end

另请注意,我在上面演示了您尝试用于字符类范围(即。a..z)的语法错误,正则表达式语法为a-z

相关问题