以下正则表达式语句之间结果不同的原因是什么:
"abbcccddddeeee"[/z*/] # => ""
而这些返回nil
:
"some matching content"[/missing/] # => nil
"start end"[/\Aend/] # => nil
发生的事情是/z*/
返回零次或多次出现的z
.
如果您使用/z+/
返回一个或多个的 ,您会看到它nil
按预期返回。
正则表达式/z*/
匹配 0 个或多个z
字符,因此它还匹配字符串开头的空字符串。考虑一下:
"abbcccddddeeee" =~ /z*/
# => 0
因此String#[]
返回匹配的空字符串。
在您的第二个示例中,表达式/missing/
and/\Aend/
不匹配任何内容,因此nil
返回。
*
通配符代表 0 个或多个匹配项,因此即使您的 z 不存在,它也会显示一个空字符串匹配项。另一方面,您可以使用+
1 个或多个匹配项以及?
零个或多个匹配项。