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