Ruby regexp返回"" vs nil

时间:2013-08-27 10:44:02

标签: ruby regex

以下正则表达式语句之间的不同结果背后的原因是什么:

"abbcccddddeeee"[/z*/] # => ""

这些返回nil

"some matching content"[/missing/] # => nil
"start end"[/\Aend/] # => nil

3 个答案:

答案 0 :(得分:9)

正在发生的事情是/z*/将返回{strong>零或更多次z次出现。

如果您使用返回一个或多个的/z+/,则会看到它按预期返回nil

答案 1 :(得分:6)

正则表达式/z*/匹配0个或更多z个字符,因此它还匹配字符串开头的空字符串。考虑一下:

"abbcccddddeeee" =~ /z*/
# => 0

因此String#[]返回匹配的空字符串。

在第二个示例中,表达式/missing//\Aend/与任何内容都不匹配,因此返回nil

答案 2 :(得分:0)

*通配符代表0或更多匹配,因此即使您的z不存在,它也会显示空字符串匹配。另一方面,您可以将+用于1个或更多,?用于零个或多个匹配。