6

以下正则表达式语句之间结果不同的原因是什么:

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

而这些返回nil

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

3 回答 3

9

发生的事情是/z*/返回零次或多次出现的z.

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

于 2013-08-27T10:49:08.220 回答
7

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

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

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

在您的第二个示例中,表达式/missing/and/\Aend/不匹配任何内容,因此nil返回。

于 2013-08-27T10:50:14.093 回答
0

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

于 2013-08-27T10:51:24.440 回答