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

use*_*099 8 regex perl

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

$value =~ s/^\s+//;
$value =~ s/\s+$//;
$header[$i]= $value;
Run Code Online (Sandbox Code Playgroud)

Zai*_*aid 12

来自perldoc perlfaq4:

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

替换可以为您做到这一点.对于单行,您希望不使用任何内容替换所有前导或尾随空格.你可以用一对替换来做到这一点:

s/^\s+//;
s/\s+$//;
Run Code Online (Sandbox Code Playgroud)

您也可以将其写为单个替换,尽管结果语句比单独的语句慢.不过,这对你来说无关紧要:

s/^\s+|\s+$//g;
Run Code Online (Sandbox Code Playgroud)

在此正则表达式中,交替匹配字符串的开头或结尾,因为锚点的优先级低于交替.使用该/g标志,替换将使所有可能的匹配,因此它获得两者.请记住,尾随换行符匹配\s+,并且$锚点可以匹配字符串的绝对结尾,因此换行符也会消失.


来自perldoc perlrequick:

要指定它应该匹配的位置,我们将使用锚元字符^$.锚^意味着在字符串的开头匹配,锚意味着在字符串$的末尾匹配,或者在字符串结尾的换行符之前.一些例子:

"housekeeper" =~ /keeper/;         # matches
"housekeeper" =~ /^keeper/;        # doesn't match
"housekeeper" =~ /keeper$/;        # matches
"housekeeper\n" =~ /keeper$/;      # matches
"housekeeper" =~ /^housekeeper$/;  # matches
Run Code Online (Sandbox Code Playgroud)