Ruby的.match方法总是返回true

时间:2012-11-30 18:32:09

标签: ruby regex pattern-matching

有人能告诉我为什么这个方法总是返回true,即使字符串与模式不匹配?我通过TextWrangler的正则表达式引擎运行了正则表达式,模式是正确的。感谢

def validatePEM pem
 if /^-{4}([-\s])BEGIN/.match(pem)
   print "validatePEM found a match\n"
   return true
 else
   return false
  end
end
@s = '---BEGIN RSA PRIVATE KEY-----'


if validatePEM @s
  print "VALID PEM FILE\n"
else
  print "INVALID PEM FILE\n"
end

1 个答案:

答案 0 :(得分:1)

正如一个FYI,有几件事以“非Ruby”的方式完成。

我写道:

def validatePEM pem
if /\A-{4}([-\s])BEGIN/.match(pem)
  print "validatePEM found a match\n"
  return true
else
  return false
  end
end
@s = '---BEGIN RSA PRIVATE KEY-----'


if validatePEM @s
  print "VALID PEM FILE\n"
else
  print "INVALID PEM FILE\n"
end

类似的东西:

def validatePEM(pem)
  !!pem[/\A-{4}([\s-])BEGIN/]
end

@s = '---BEGIN RSA PRIVATE KEY-----'

puts '%s PEM FILE' % (validatePEM(@s) ? 'VALID' : 'INVALID')

使用三元语句进行打印是有些人在使用Ruby编写时可能会提出的问题,但是Ruby Style guide同意用三元(?:)编写琐碎的条件测试是正常的。