0

不是量词 * ,贪心吗?不应该\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;

请帮助我理解这种行为。

4

1 回答 1

1

\s*将仅匹配完全由同一类字符(即空格)组成的字符串。在您的情况下,www.devserver.com前导空格和尾随空格之间存在空格。

您可能已尝试使用.class 而不是\s

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

这也不会触及尾随的换行符!根据perlre

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

因此,总结一下:您所期望的行为可以通过以下替换来重现:

$input=~s/\w+.:.*//s;
于 2012-12-28T14:45:03.217 回答