我希望这打印,"[b]"但它打印"[]":
$x = "abc";
$x =~ /(b*)/;
print "[$1]";
Run Code Online (Sandbox Code Playgroud)
如果用加号替换星号,它就像我期望的那样.是不是加号和明星都应该贪婪?
补充:感谢大家指出(在几秒钟内,似乎!)"b*"匹配空字符串,第一次出现在字符串开始之前.所以贪婪根本不是问题.它甚至在到达第一个'b'之前匹配空字符串.
cha*_*aos 10
模式将匹配并在第一次返回时返回b*,即它将执行零宽度匹配a.为了更清楚地说明发生了什么,请执行以下操作:
$x = "zabc";
$x =~ /(.b*)/;
print "[$1]";
Run Code Online (Sandbox Code Playgroud)
Log*_*ldo 10
它很贪婪,但b*会匹配空字符串.任何*总是匹配空字符串,所以,
"abc"
/\
--- matches the empty string here.
Run Code Online (Sandbox Code Playgroud)
如果你打印$'你会看到它是abc,这是匹配后的其余字符串.贪婪只是意味着在"bbb"的情况下,你得到"bbb",而不是"b"或"bb".