Regex perl正则表达式-量词*不够贪婪,无法拾取字符串末尾的换行符

Regex perl正则表达式-量词*不够贪婪,无法拾取字符串末尾的换行符,regex,perl,Regex,Perl,它不是量词*,贪婪吗?不应该\s*匹配0个或更多出现的空格,而这些空格将匹配所有内容,直到给定输入字符串的末尾 #!/usr/bin/perl use strict; use warnings; my $input="Name : www.devserver.com\n"; $input=~s/\w+.:\s*//; # /s* should not it match everthing till \n at the end ? print $input; 请帮助我理解此行为。\

它不是量词*,贪婪吗?不应该
\s*
匹配0个或更多出现的空格,而这些空格将匹配所有内容,直到给定输入字符串的末尾

#!/usr/bin/perl
use strict;
use warnings;
my $input="Name :       www.devserver.com\n";
$input=~s/\w+.:\s*//;  # /s* should not it match everthing till \n at the end ?
print $input;

请帮助我理解此行为。

\s*
将只匹配完全由同一类字符(即空格)组成的字符串。 在您的例子中,在前导空格和尾随空格之间有
www.devserver.com

您可能试图使用
类而不是
\s

$input=~s/\w+.:.*//;
这也不会触及尾随的新行!根据:

为了简化多行替换,除非使用/s修饰符,否则“.”字符永远不会与换行符匹配,因为/s修饰符实际上告诉Perl将字符串假装为一行,即使它不是

因此,总结一下:您期望的行为可以通过以下替换进行复制:

$input=~s/\w+.:.*//s;

\w+。:\s*
将匹配
“Name:\uuuuuuuuuuuuuuuu”
。它在
“www”
之前停止,而且永远不会到达结尾
\n
。www.devserver.com中的字符都不匹配
\s
对不起,我不明白<代码>*将匹配零次或多次出现的模式权限。在这种情况下,匹配从起点到终点的所有字符(即
\n
此处)不是很贪婪吗@chidori:
\s*
将匹配所有空白字符,并在看到非空白字符时立即停止。“www.devserver.com”不是空格,
\s*
因此在第一个“w”处就停止匹配。@chidori:补充一下赵的答案:“贪婪”一词在这个上下文中的意思是“抓住你能抓住的一切……但不要更多!”尽管表达式“\s*”可能是贪婪的,但除了连续(“连续”)之外,它不允许抓住任何东西空间序列,或者什么都没有。