Perl之正则表达式基础(三)

来源:互联网 发布:长沙 招聘 网络推广 编辑:程序博客网 时间:2024/05/10 06:00

最开始我说过,Perl的最强大之处在于处理文本。然而,在前两篇(一、二)中,我只介绍了如何来匹配模式。本文中我将演示如何通过模式来改变字符串,即如何使用正则表达式来处理文本。

 

替换

s///:如果将m//看作“查询”,那s///操作则类似于“查询并替换”,它将替换模式所匹配上的部分。m//可以和任何字符串表达式进行比配,但显然s///只能修改被称为左值的数据,通常是一个变量。

/g:全局替换,s///只进行一次替换。

s/^/s+//:将开头的空白去掉。

s//s+$//:将结尾的空白去掉。

s/^/s+|/s+$//g:将开头结尾的空格都去掉。

 

其它可选的修师符

/i、/x和/s:与普通模式匹配中出现过的修饰符意义相同。

 

绑定操作

类似于普通模式匹配中,可以使用绑定操作符=~改变s///的替换目标。

 

大小写转换

/U:要求后面的均大写。

/L:要求后面的均小写。

/E:默认时,/U与/L会影响到其后的所有替换字符串,/E被用来改变这种影响。

/u:只要求下一个字符大写。

/l:只要求下一个字符小写。

/u/L:第一个字符大写,其它均小写。

下面是一个例子,

$_ = "aaron and jessie";

s/(aaron|jessie)//U$1/gi;                     # $_ = "AARON and JESSIE"

s/(aaron|jessie)//L$1/gi;                      # $_ = "aaron and jessie"

s/(/w+) and (/w+)//U$2/E and $1/i;    # $_ = "JESSIE and aaron",而非"JESSIE AND AARON"

s/(aaron|jessie)//u$1/ig;                      # $_ = "JESSIE and Aaron"

s/(aaron|jessie)//u/L$1/ig;                   # $_ = "Jessie and Aaron"

 

split操作

my @fields = split /sep/, $string:split根据模式将字符串分割开,这里的sep可以是冒号、空白等简单字符,也可以是一般的正则表达式。

空元素规则:默认情况下,开头的空元素被返回,但结尾的空元素被丢弃。如果需要结尾的空元素,可以使用split的第三个参数-1。

my @fields = split: 默认情况下,split对$_操作,模式为空白,即类似于split //s+/, $_,除了这种情况下开头的空元素将被丢弃。

 

join函数

my $result = join $sep, @fields:join函数不使用模式,它恰恰完成同split相反的操作。