perl——当split函数用空格做分隔符时

2017-03-22 19:39:45来源:CSDN作者:Aggressive_snail人点击

split语法

## 语法split /PATTERN/,EXPR split /PATTERN/ split 

split用来分隔字符串EXPR,在列表上下文中返回分隔后的列表,在标量上下文中返回列表长度。
[详见参考]

split用空格分隔字符串

#!/usr/bin/perl$_= "   a   b   c   d   e";    ## 字符串有前导空格,字符‘a’前面有空白print join " | ", split ;       ## 默认分隔符print "/n";print join " ! ", split //s+/;  ## 正则匹配空格print "/n";print join " | ", split ' ';    ## 直接量空格print "/n";##### 输出结果##  a | b | c | d | e##   ! a ! b ! c ! d ! e##  a | b | c | d | e

默认分隔符split和直接量分隔符split ' '都把字符串的前导空格去掉了,而正则匹配split //s+/为前导空格保留了位置,用一个空字符''代替。

以前认为split //s+/split ' '是一样的,现在看来是不一样的。

为什么会这样呢!

-代替空格

#!/usr/bin/perl$_= "---a--b----c-d-e";print join " ! ", split /-+/;print "/n";####输出结果#  ! a ! b ! c ! d ! e

可以理解为perl字符串是由一个空字符''开头,这样就可以理解上一节中,split //s+/分隔后的结果。

split ' '是split的特殊情况,该格式是模拟awk的默认行为,所以在分割行为开始之前,会把字符串中的前导空格全部删除,然后再使用split //s+/处理,这就是为什么两者结果不同的原因。

除了split ' '这种特殊情况外,如果提供其他字符串,perl也会解释为正则表达式去执行。

对字符串的处理

那么以后处理文件的时候,必要的处理就是去掉前导空格,以免造成错误。

    while($string) {        s/^/s+//;   ## 丢弃前导空白符        s//s+$//;   ## 丢弃末尾空白符        s//s+/ /g;  ## 合并中间内部空白符    }

同样的实现

$string = join(" ", split " ", $string);

最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台