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

时间:2012-12-28 14:35:40

标签: 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;

请帮助我理解这种行为。

1 个答案:

答案 0 :(得分:1)

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

您可能尝试使用.课程代替\s

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

这也不会触及尾随换行符!根据{{​​3}}:

  

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

所以,把它包起来:你期望的行为可以通过以下替代来再现:

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