9

我对正则表达式感到困惑.*

#!usr/bin/perl
use strict;
use warnings;

my $text = "scott";
$text =~ s/.*/\//g;
print $text;

输出://

所以,我不知道为什么结果是//而不是/.

4

2 回答 2

10

.*匹配两次。首先,它匹配“scott”。然后它匹配“scott”之后的空字符串。

于 2013-10-25T07:11:25.563 回答
4

第一次通过,.*匹配从位置零 ( scott) 开始的 5 个字符。这被替换为/.

/g表示尽可能多地匹配,所以它再次尝试,这次从位置 5 开始。

第二次.*匹配从位置 5 开始的 0 个字符(空字符串)。这被替换为/.

第三次通过,.*匹配从位置 5 ("") 开始的 0 个字符,但有一个检查确保它不匹配相同的起始位置和长度连续两次。所以它推进位置并尝试在第六位置匹配。因为那在字符串之外,所以它失败了。

于 2013-10-25T11:33:15.197 回答