我对像.*
#!usr/bin/perl
use strict;
use warnings;
my $text = "scott";
$text =~ s/.*/\//g;
print $text;
输出://
所以,我不知道为什么结果是//
而不是/
。
答案 0 :(得分:10)
.*
匹配两次。首先,它匹配“斯科特”。然后它匹配“scott”后的空字符串。
答案 1 :(得分:4)
第一次,.*
匹配从位置零开始的5个字符(scott
)。这会被/
替换。
/g
表示尽可能多次匹配,因此会再次尝试,这次是从第五位开始。
第二次,.*
匹配从第五位开始的0个字符(空字符串)。这会被/
替换。
第三次通过,.*
匹配从位置5(“”)开始的0个字符,但是有一个检查确保它连续两次匹配相同的起始位置和长度。所以它推进了位置并尝试在第六位进行匹配。因为它在字符串之外就失败了。