Perl中如何同时按换行符和空格分割字符串?
Perl中split同时按空格和换行分割字符串的问题
你的问题出在正则表达式的写法上:/\s\n/表示匹配一个空白字符紧跟一个换行符的连续组合,而不是匹配任意空白字符(包括空格)或者换行符。所以只有当字符串里出现“空格+换行”的位置才会触发分割,自然没法拆分单独的空格分隔的内容。
修正方案
Perl里的\s本身就包含了换行符(\n)、空格、制表符等所有空白字符,所以只需要匹配任意连续的空白序列就能同时拆分空格和换行:
方法1:使用正则匹配任意连续空白
#!/usr/bin/perl use warnings; use strict; my $str = "aa bb cc\ndd ee ff"; my @arr = split(/\s+/, $str); # 匹配任意连续空白作为分隔符 print join("\n", @arr);
方法2:利用split的默认行为
split如果第一个参数是空格字符串(' '),会默认按任意空白分割(自动忽略开头的空白,合并连续空白),效果和上面一致:
my @arr = split ' ', $str;
输出结果
aa bb cc dd ee ff
补充说明:你对\s包含空格的理解是正确的,但正则里的A B是匹配A紧跟B的连续序列,而不是“A或B”。如果要明确写“空格或换行”,可以用字符类/[ \n]/,但\s已经覆盖了这些场景,用\s+更简洁高效,还能避免连续空白产生空元素。
内容的提问来源于stack exchange,提问作者Pete
相关产品推荐
相关产品推荐

