像".*"这样的正则表达式如何在perl中工作

yQu*_*ery 8 regex perl

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

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

my $text = "scott";
$text =~ s/.*/\//g;
print $text;
Run Code Online (Sandbox Code Playgroud)

输出: //

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

yst*_*sth 10

.*匹配两次.首先,它匹配"斯科特".然后它匹配"scott" 之后的空字符串.

  • 确实如此.运行`use re"debug";`看看谁是正确的:) (2认同)

ike*_*ami 4

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

/g意味着匹配尽可能多的次数,因此它会再次尝试,这次从位置 5 开始。

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

第三次,.*从位置五 ("") 开始匹配 0 个字符,但有一个检查可确保它不会连续两次匹配相同的起始位置和长度。因此它前进了位置并尝试在第六位进行匹配。由于它位于字符串之外,因此失败。