我知道以下三行代码旨在将字符串提取到$ value并将其存储在$ header中。但我不知道$value =~ s/^\s+//;
和$value =~ s/\s+$//;
之间有什么区别。
$value =~ s/^\s+//;
$value =~ s/\s+$//;
$header[$i]= $value;
答案 0 :(得分:11)
如何从字符串的开头/结尾删除空格?
替换可以为您做到这一点。对于单行,您需要 什么都不用替换所有前导或尾随空格。您可以 用一对替换来做到这一点:
s/^\s+//; s/\s+$//;
你也可以把它写成一个替换,尽管它会转变 结合语句比单独语句慢。那 但是对你来说可能并不重要:
s/^\s+|\s+$//g;
在这个正则表达式中,交替匹配在 字符串的开头或结尾,因为锚点较低 优先于交替。使用
/g
标志,替换 使所有可能的匹配,所以它得到两者。记住,尾随 换行符与\s+
匹配,$
锚点可以匹配。{1}} 字符串的绝对结尾,所以换行也消失了。
要指定它应匹配的位置,我们将使用锚点 元字符
^
和$
。锚^
表示匹配 字符串的开头和锚$
表示匹配的结尾 字符串,或字符串末尾的换行符之前。一些 示例:"housekeeper" =~ /keeper/; # matches "housekeeper" =~ /^keeper/; # doesn't match "housekeeper" =~ /keeper$/; # matches "housekeeper\n" =~ /keeper$/; # matches "housekeeper" =~ /^housekeeper$/; # matches
答案 1 :(得分:1)
^表示以$开头,$表示以此字符串结尾。
答案 2 :(得分:1)
第一个只会替换行开头的空格。