扫描/匹配错误的输入错误消息

时间:2018-05-28 12:30:18

标签: ruby string

我正在尝试计算用户的正确输入。输入看起来像:

m = "<ex=1>test xxxx <ex=1>test xxxxx test <ex=1>"

标记ex=1和单词test必须连接,并按此特定顺序计算为正确。如果输入无效,我想向用户发送一条解释错误的错误消息。

我尝试按以下方式执行:

ex_test_size = m.scan(/<ex=1>test/).size  # => 2
test_size = m.scan(/test/).size  # => 3
ex_size = m.scan(/<ex=1>/).size  # => 3

puts "lack of tags(<ex=1>)" if ex_test_size < ex_size
puts "Lack of the word(test)" if ex_test_size < test_size

我相信它可以用更好的方式编写,因为我的编写方式,我想,容易出错。如何确保找到所有错误并向用户显示?

1 个答案:

答案 0 :(得分:1)

您可以使用negative lookarounds

#⇒ ["xxx test", "<ex=1>"]
m.scan(/<ex=1>(?!test).{,4}|.{,4}(?<!<ex=1>)test/).map do |msg|
  "<ex=1>test expected, #{msg} got"
end.join(', ')

我们扫描字符串以查找<ex=1>,而不是test,反之亦然。此外,我们最多可以抓取4个违反更具描述性信息规则的字符。