我开始学习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中,它将按预期工作。但为什么它不适用于红宝石。
答案 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]/