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