我正在尝试计算额外空格的数量,包括字符串中的尾随和前导空格。那里有很多建议,但没有一个能完全正确地计算出来。
示例(_ 表示空格)
__this is a string__with extra spaces__
应该匹配 5 个额外的空格。
这是我的代码:
if (my @matches = $_[0] =~ m/(\s(?=\s)|(?<=\s)\s)|^\s|\s$/g){
push @errors, {
"error_count" => scalar @matches,
"error_type" => "extra spaces",
};
}
这个正则表达式的问题是它计算了中间的空格两次。但是,如果我取出其中一个前瞻/后视匹配,如下所示:
$_[0] =~ m/\s(?=\s)|^\s|\s$/g
它不会在字符串的开头计算两个额外的空格。(我的测试字符串只能匹配 4 个空格。)