Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式是什么样的*&引用;在perl中工作_Regex_Perl - Fatal编程技术网

Regex 正则表达式是什么样的*&引用;在perl中工作

Regex 正则表达式是什么样的*&引用;在perl中工作,regex,perl,Regex,Perl,我对像* #!usr/bin/perl use strict; use warnings; my $text = "scott"; $text =~ s/.*/\//g; print $text; 输出:/ 因此,我不知道为什么结果是/而不是/*匹配两次。首先,它与“scott”匹配。然后它匹配“scott”之后的空字符串。第一次到,*匹配从位置0开始的5个字符(scott)。这将被替换为/ /g表示尽可能多次匹配,因此它会重试,这次从第五位开始 第二次到,*匹配从位置5开始的0个字符(空字

我对像
*

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

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


因此,我不知道为什么结果是
/
而不是
/

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

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

/g
表示尽可能多次匹配,因此它会重试,这次从第五位开始

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


第三次通过,
*
将匹配从位置5(“”)开始的0个字符,但有一个检查确保它在一行中两次不匹配相同的起始位置和长度。因此,它提高了位置,并试图在第六个位置进行匹配。因为它在字符串之外,所以失败。

匹配任何字符,
*
匹配0或上一个字符的任何出现。所以
*
表示匹配anything@bansi那么为什么它不匹配所有内容呢?
perl-MData::Dumper-e'$text=“scott”$text=~s/(.*)/print Dumper$1/ge'
我们可以看到,正则表达式引擎在到达字符串末尾时会再次尝试匹配,但我认为问题是,当它已经到达字符串末尾时,为什么还要继续匹配。确实如此。运行时使用
重新“调试”查看谁是正确的:)这一个是。使用
$text=~s/(.*)/>$1嘿,伙计们,我们不是在投票战网站上。这无助于其他人达成共识,希望找到解决方案。投票时最好解释一下。这将有助于海报理解他们的错误。我们都在这里学习。对不起。我仍然感到困惑。如果我使用$text=~s/^.*/\//g;你知道,结果将是“/”(只有一个斜杠)。我想知道为什么会这样。因此,如果它与“scott”后面的空字符串匹配,如何解释这一点。请记住,正则表达式在生成新字符串时会继续查看原始字符串<代码>/^.*/
无法在
“scott”
的末尾再次匹配,因为
^
只允许它在字符串的开头匹配。我同意你的看法。实际上,如果我删除/g选项,它将是/(一个斜杠)。另外,s/*?t/g=>//和s/*?t/=>/,所以我相信你。它不会在同一起始位置连续两次匹配零长度;对于非零长度,它不能有相同的起始position@ysth,同样的事情。我的措辞清楚地表明,否则就会出现无限循环。