Perl删除前导和拖尾空白(删除左右空格、空白字符)

所属分类: 脚本专栏 / perl 阅读数: 2089
收藏 0 赞 0 分享

其它一些编程语言中,有函数ltrim和rtrim分别用于从字符串开头和末尾删除空格和制表符。 也有的提供了函数trim来删除字符串两端的空白字符。Perl里没这些函数因为简单的正则表达式替换就能实现这个目的(不过我确信CPAN有很多模块实现了这些函数)。事实上这太简单了以至于成了帕金森琐碎定理里的一个显著主题。

左侧整理

ltrim或者lstrip从字符串左侧删除空白字符:

复制代码 代码如下:

$str =~ s/^\s+//;

从字符串开头^开始匹配一个或者多个空白字符(\s+),并将之替换成空字符。

右侧整理

rtrim或者rstrip从字符串右侧删除空白字符:

复制代码 代码如下:

$str =~ s/\s+$//;

匹配一个或者多个空白字符(\s+)直到字符串末尾($),并将之替换成空字符。

整理两端

trim删除字符串两端的空白字符:

复制代码 代码如下:

$str =~ s/^\s+|\s+$//g

将上面两个正则表达式用或记号|连起来,并在最后增加/g用以全局地执行替换操作(反复多次)。

封装在函数里

如果你不想在代码中看到这些结构,你可以在代码里添加这些函数:

复制代码 代码如下:

sub ltrim { my $s = shift; $s =~ s/^\s+//;       return $s };
sub rtrim { my $s = shift; $s =~ s/\s+$//;       return $s };
sub  trim { my $s = shift; $s =~ s/^\s+|\s+$//g; return $s };

使用时像这样:
复制代码 代码如下:

my $z = " abc ";
printf "<%s>\n", trim($z);   # <abc>
printf "<%s>\n", ltrim($z);  # <abc >
printf "<%s>\n", rtrim($z);  # < abc>
String::Util

String::Util

要是实在不想拷贝那些东西,你可以安装一个模块。

例如String::Util提供了函数trim,你可以如下使用:

复制代码 代码如下:

use String::Util qw(trim);

my $z = " abc ";
printf "<%s>\n", trim( $z );              # <abc>
printf "<%s>\n", trim( $z, right => 0 );  # <abc >
printf "<%s>\n", trim( $z, left  => 0 );   # < abc>


默认它整理两侧,你不需要提供参数。 我觉得,自己实现ltrim和rtrim会清晰些。

Text::Trim

另一个模块Text::Trim提供了3个函数,但是它极度采纳了Perl风格的写法,可能到了有些危险的地步。

如果你调用它并将返回值用在print语句或者赋给一个变量,它会返回整理过的字符串,并保持原始字符串不变。

复制代码 代码如下:

use Text::Trim qw(trim);

my $z = " abc ";
printf "<%s>\n", trim($z);  # <abc>
printf "<%s>\n", $z;       # < abc >


另一方面,如果你在空白上下文调用它,亦即不使用返回值,trim函数就会修改参数,产生类似chomp的行为。
复制代码 代码如下:

use Text::Trim qw(trim);

my $z = " abc ";
trim $z;
printf "<%s>\n", $z;       # <abc>

更多精彩内容其他人还在看

perl操作MongoDB报错undefined symbol: HeUTF8解决方法

这篇文章主要介绍了perl操作MongoDB报错undefined symbol: HeUTF8解决方法,需要的朋友可以参考下
收藏 0 赞 0 分享

cpanm安装及Perl模块安装教程

这篇文章主要介绍了cpanm安装及安装Perl模块教程,本文先是给出了cpanm的安装教程,同时给出了Perl模块的安装实例,需要的朋友可以参考下
收藏 0 赞 0 分享

Windows和Linux系统下perl连接SQL Server数据库的方法

这篇文章主要介绍了Windows和Linux系统下perl连接SQL Server数据库的方法,本文详细的讲解了Windows和Linux系统中perl如何连接Microsoft SQL Server数据库,需要的朋友可以参考下
收藏 0 赞 0 分享

Perl脚本实现检测主机心跳信号功能

这篇文章主要介绍了Perl脚本实现检测主机心跳信号功能,本文代码也可作为perl串口通信的实例,需要的朋友可以参考下
收藏 0 赞 0 分享

Perl中使用File::Lockfile确保脚本单实例运行

这篇文章主要介绍了Perl中使用File::Lockfile确保脚本单实例运行的方法,本文直接给出实例,方法非常简单,需要的朋友可以参考下
收藏 0 赞 0 分享

7个perl数组高级操作技巧分享

这篇文章主要介绍了7个perl数组高级操作技巧,本文讲解了数组去重、数组合并、查找最大值、列表归并等内容,需要的朋友可以参考下
收藏 0 赞 0 分享

perl面向对象实例

这篇文章主要介绍了perl面向对象实例,本文讲解了一个类只是一个简单的包、对象仅仅只是引用、一个方法就是一个简单的子程序等内容,并给出了一个简单示例,需要的朋友可以参考下
收藏 0 赞 0 分享

Perl eval函数使用实例

这篇文章主要介绍了Perl eval函数使用实例,本文讲解了eval 函数的两种使用方式,并给出3个使用实例,需要的朋友可以参考下
收藏 0 赞 0 分享

Perl函数(子程序)学习笔记

这篇文章主要介绍了Perl函数(子程序)学习笔记,本文讲解了函数定义、函数返回值、函数参数传递等内容,需要的朋友可以参考下
收藏 0 赞 0 分享

Perl中的控制结构学习笔记

这篇文章主要介绍了Perl中的控制结构学习笔记,本文讲解了条件语句if、条件语句unless、循环语句while、循环语句until、for循环、foreach语句、循环控制等内容,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多