在Perl中,s / ^ \ s + //和s / \ s + $ //之间有什么区别?

时间:2012-02-13 14:46:46

标签: regex perl

我知道以下三行代码旨在将字符串提取到$ value并将其存储在$ header中。但我不知道$value =~ s/^\s+//;$value =~ s/\s+$//;之间有什么区别。

$value =~ s/^\s+//;
$value =~ s/\s+$//;
$header[$i]= $value;

3 个答案:

答案 0 :(得分:11)

来自perldoc perlfaq4

  

如何从字符串的开头/结尾删除空格?

     

替换可以为您做到这一点。对于单行,您需要   什么都不用替换所有前导或尾随空格。您可以   用一对替换来做到这一点:

s/^\s+//;
s/\s+$//;
     

你也可以把它写成一个替换,尽管它会转变   结合语句比单独语句慢。那   但是对你来说可能并不重要:

s/^\s+|\s+$//g;
     

在这个正则表达式中,交替匹配在   字符串的开头或结尾,因为锚点较低   优先于交替。使用/g标志,替换   使所有可能的匹配,所以它得到两者。记住,尾随   换行符与\s+匹配,$锚点可以匹配。{1}}   字符串的绝对结尾,所以换行也消失了。


来自perldoc perlrequick

  

要指定它应匹配的位置,我们将使用锚点   元字符^$。锚^表示匹配   字符串的开头和锚$表示匹配的结尾   字符串,或字符串末尾的换行符之前。一些   示例:

"housekeeper" =~ /keeper/;         # matches
"housekeeper" =~ /^keeper/;        # doesn't match
"housekeeper" =~ /keeper$/;        # matches
"housekeeper\n" =~ /keeper$/;      # matches
"housekeeper" =~ /^housekeeper$/;  # matches

答案 1 :(得分:1)

^表示以$开头,$表示以此字符串结尾。

答案 2 :(得分:1)

第一个只会替换行开头的空格。