为什么这个正则表达式在ruby中成为现实?

时间:2016-07-20 06:46:15

标签: ruby regex

我开始学习ruby中的正则表达式。在那我有一个问题。问题是下面的正则表达式无法正常工作。

/^[\s]*$/  -- This will match only if the input contains white spaces or the input contains empty.

例如,

str = "      

        abc

            "
if str =~ /^[\s]*$/
        puts "Condition is true"
else
        puts "Condition is false"
end

我的期望是这种情况会变得虚假。但它成真了。我不知道为什么?

在sed或grep中,它将按预期工作。但为什么它不适用于红宝石。

1 个答案:

答案 0 :(得分:4)

原因是在Ruby正则表达式中,^$匹配行的开头/结尾。更改为\A\z,您将获得false结果。

this Ruby demo at Ideone/\A\s*\z/只匹配字符串,它们是空的或只有空白符号。

至于\s,它是[ \t\r\n\f]的同义词,而不仅仅是[ \t\n]。见Ruby Character Class reference

  

/\s/ - 空白字符:/[ \t\r\n\f]/