寻找一种方法来选择换行符,而不管创建文件的平台。
perlport#newlines指定的问题是每个平台上的换行符编码方式不同:
\ 012 unix
\ 015 \ 012 windows
\ 015 mac
但是,chomp是特定于平台的,只会删除正在运行的平台的字符,或$/
变量设置的任何字符。
到目前为止,我提出了以下似乎有效的正则表达式:
# multiplatform chomp
s/\015?\012?$//;
这是正确的解决方案还是我错过了一些案例并且有更好的案例?
答案 0 :(得分:2)
为什么不使用
s/\s+$//;
答案 1 :(得分:1)
\ v匹配垂直空格,因此您应该可以使用
s/\v+$//;
但是,这假设您不介意删除换页和垂直标签等内容。
答案 2 :(得分:0)
如果你真的想要捕捉所有情况,那么你的正则表达式可以用于删除换行符。但是检查换行是否存在是不行的,它会很乐意匹配没有换行符的行。为此,你必须全力拼出。
m{(\015|\015\012|\012)\z};
请注意\z
的使用。这是因为$
将匹配将从捕获组窃取的行末尾的换行符。
实际上,您不必担心“Mac”换行符。 “Mac”换行符指的是OS X之前的MacOS。 非常 不太可能会遇到那个时代的文件,我说这是一个仍然有效的人Mac SE。所以你真正需要担心的是Windows和Unix新行。这通常是这样做的:
s{\015?\012\z}{};