拆分包含换行符的字符串会产生意外结果

jam*_*mcq 5 regex perl split

在 Perl 中,如果我分割一个包含换行符的字符串,如下所示;

@fields = split /\n/, "\n\n\n";
Run Code Online (Sandbox Code Playgroud)

@fields 为空。

更多示例:

@fields = split /\n/, "A\nB\nC";   # 3 items ("A","B","C") as expected
@fields = split /\n/, "A\n\nC";    # 3 items ("A","","C")  as expected
@fields = split /\n/, "A\nB\n";    # 2 items ("A","B" )    NOT as expected
@fields = split /\n/, "\nB\nC";    # 3 items ("","B","C")  as expected
@fields = split /\n/, "A\n\n";     # 1 items ("A")         NOT as expected
Run Code Online (Sandbox Code Playgroud)

它的行为就像尾随换行符被忽略一样。

如果我的字符串包含 3 个换行符,并且我在换行符上进行拆分,为什么我的数组不总是包含 3 个项目?

我有办法做到这一点吗?

顺便说一句,我在所有版本的 Perl 上都得到了相同的结果(5.34.0、5.30.3、5.22.1 和 5.18.2)

tob*_*ink 8

perlfuncsplit下记录了如果省略参数,则返回列表中会LIMIT省略尾随空白部分:

如果省略 LIMIT(或者等效地为零),则通常将其视为负数,但尾随空字段将被删除(空前导字段始终保留);如果所有字段均为空,则所有字段都被视为尾随(因此在这种情况下被删除)。

要包含它们,请包含一个LIMIT参数,如果您不想限制返回字符串的数量,则该参数可以是 -1。

尝试:

@fields = split /\n/, "A\nB\n", -1;
Run Code Online (Sandbox Code Playgroud)