Ruby正则表达式返回""与nil的区别

6
以下正则表达式语句产生不同结果的原因是什么:
"abbcccddddeeee"[/z*/] # => ""

这些会返回 nil 的函数:

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

9
发生的情况是/z*/将返回z零个或多个出现次数。

如果使用/z+/,它将返回一个或多个z,如果没有匹配则会像预期那样返回nil


7
正则表达式/z*/匹配0个或多个z字符,因此它也会在字符串开头匹配一个空字符串。请考虑以下内容:
"abbcccddddeeee" =~ /z*/
# => 0

因此,String#[] 返回匹配的空字符串。
在你的第二个例子中,表达式/missing//\Aend/都没有匹配任何内容,因此返回nil

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接