以下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个或多个匹配,将?
用于零个或更多个匹配。