Ruby 正则表达式返回 " " vs 零



以下regexp语句之间结果不同的原因是什么:

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

这些返回nil:

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

发生的情况是/z*/将返回零次或多次z

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

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

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

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

在第二个示例中,表达式/missing//Aend/不匹配,因此返回nil

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

最新更新