`
haiouc
  • 浏览: 115796 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

perl split函数

    博客分类:
  • Perl
 
阅读更多

Perl中的一个非常有用的函数是split, split 把字符串进行分割并把分割后的结果放入数组中。这个函数使用规则表达式(RE),如果未特定则工作在$_变量上。

 

split函数可以这样使用:
$info = "Caine:Michael:Actor:14, Leafy Drive";
@personal = split(/:/, $info);
其结果是:
@personal = ("Caine", "Michael", "Actor", "14, Leafy Drive");

 

如果我们已经把信息存放在$_变量中,那么可以这样:
@personal = split(/:/);

 

如果各个域被任何数量的冒号分隔,可以用RE代码进行分割:
$_ = "Capes:Geoff::Shot putter:::Big Avenue";
@personal = split(/:+/);

其结果是
@personal = ("Capes", "Geoff", "Shot putter", "Big Avenue");

但是下面的代码:
$_ = "Capes:Geoff::Shot putter:::Big Avenue";
@personal = split(/:/);

的结果是
@personal = ("Capes", "Geoff", "", "Shot putter", "", "", "Big Avenue");


单词可以被分割成字符,句子可以被分割成单词,段落可以被分割成句子:

@chars = split(//, $word);
@words = split(/ /, $sentence);
@sentences = split(/\./, $paragraph);

在第一句中,空字符串在每个字符间匹配,所以@chars数组是一个字符的数组。>>

=======================================================

才学习perl,前几天偶然发现split的几种用法,就测试了一下各种用法的效率。

 

先引用一段split的手册:
split /PATTERN/, EXPR, LIMIT
split /PATTERN/, EXPR
split /PATTERN/
split


这个函数扫描字串中 EXPR 给出的分隔符,并且把该字串劈成一个子字串列表,在列表环境中返回生成的列表值,或者在标量环境中返回子字串的数量。(注:标量环境同时还令 split 把它的结果写到 @_,不过这个用法现在废弃了。)分隔符是用重复的模式匹配进行判断的,用的是 PATTERN 里给出的正则表达式,因此分隔符可以是任意大小,并且不一定在每次匹配都是一样的字串。(分隔符不象平常那样返回;我们在本节稍后讨论例外情况。)如果 PATTERN 完全不能匹配该字串,那么 split 把原始字串当作子字串返回。如果它匹配了一次,那么你就得到两个子字串,以此类推。你可以在 PATTERN 里使用正则表达式修饰词,比如 /PATTERN/i,/PATTERN/x,等等。如果你以模式 /^/ 进行分裂,那么就假设是 //m 修饰词。


如果声明了 LIMIT 并且是正的,该函数分裂成不超过那么多的域(当然如果它用光了分隔符,那么是可以分裂成比较少的子字串的)。如果 LIMIT 是负数,那就把它当作声明了任意大的 LIMIT。如果省略了 LIMIT 或者是零,那么将从结果中删除结尾的空域(那些潜在的 pop 用户应该好好记住)。如果省略了 EXPR,那么该函数就分裂 $_ 字串。如果还省略了 PATTERN 或者它是一个文本空格,“ ”,那么该函数对空格进行操作,/\s+/,但是忽任何开头的空格。

 

这天看见一个文件,每行都有18项,各项之间用\t分割,使用时用到了第6项,话说这天正好求知欲比较强,就折腾了几种用法
1. my @array = split("\t",$_); my $var = $array[6];   测试文件平均用时8.2s
2. my($var) = (split("\t",$_))[6];  测试平均用时5.1s
3. my(undef,undef,undef,undef,undef,undef,$var) = split("\t",$_);  平均用时3.53s
4. my(undef,undef,undef,undef,undef,undef,$var) = split("\t",$_,7);  平均用时3.52s
5. my $var = (split("\t",$_,7))[6]; 平均用时3.53s

看来后3种才是王道,如果需要使用多项也可以进行进行适当的变动。不过两项如果跨度比较大,3,4应该是不错选择,5就只能用中间数组。

分享到:
评论

相关推荐

    perl函数手册(英文版)

    perl函数手册英文版 Perl提供了可以直接调用的、数目众多的函数。可以对以下对象进行操作: 数组:chomp, join, keys, map, pop, push, reverse, shift, sort, splice, split, unshift, values 数据库:dbmclose, ...

    perl中常用系统函数

    小骆驼书中提到的Perl常用系统函数:print printf chop split sort keys

    Perl 实例精解(第三版).pdf

    4.4.12 split函数 4. 4.13 sort函数 4.4.14 reverse函数 4.4.15 unshift函数 4.5 散列(关联数组)函数 4.5.1 keys函数 4.5.2 values函数 4.5.3 each函数 4.5.4 delete函数 4.5.5 exists...

    perl编程常用的函数

    print printf chop split keys values reverse sort length substr index push pop unshift shift join grep hex rand localtime die open close pack read exit

    Perl语言入门(第五版-中文版).pdf

    split操作符 join函数 列表上下文中的m// 更强大的正则表达式 习题 第十章其他控制结构 unless控制结构 until控制结构 条件修饰词 裸块控制结构 elsif子句 自增和自减 for控制结构 循环控制 三目...

    基于php split()函数的用法详解

    PHP函数split()的基本语法为:array split ( string $pattern, string $string [, ...说明array split ( string $pattern, string $string [, int $limit] ) 提示preg_split() 函数使用了 Perl 兼容正则表达式语法,

    PHP 正则表达式之正则处理函数小结(preg_match,preg_match_all,preg_replace,preg_split)

    在前面我们也说过,基于perl的正则表达式要快于POXIS正则表达式处理函数,所以我们只介绍以preg开头的基于perl的正则表达式。注意:在能偶使用字符串函数处理的时候,就不要使用正则表达式来处理字符串,因为字符串...

    PHP3程序设计

    9.3.8 preg_split函数 143 9.3.9 模式举例 143 9.3.10 匹配举例 144 9.3.11 替换举例 148 9.3.12 分割举例 150 9.4 MySQL …151 9.4.1 LIKE 151 9.4.2 RLIKE 152 9.5 总结 152 第10章 面向对象 154 10.1 了解类的...

    rsplit:使用正则表达式将分隔字符串拆分为元胞数组。-matlab开发

    % PERL 拆分函数。 返回一个字符串元胞数组。 需要% 正则表达式。 % % 这个函数有点像 REGEXP 的对偶:它返回所有的% 不匹配正则表达式的字符串而不是那些% 匹配。 STRREAD 类似于 RSPLIT,但它使用固定分隔符使用 ...

    Prototype 学习 工具函数学习($w,$F方法)

    Equivalent to Ruby’s %w{foo bar} or Perl’s qw(foo bar). 代码如下:function $w(string) { if (!Object.isString(string)) return []; string = string.strip(); return string ? string.split(/\s+/) : []; } ...

    精通正则表达式~~~

    Perl简短入门... 37 使用正则表达式匹配文本... 38 向更实用的程序前进... 40 成功匹配的副作用... 40 错综复杂的正则表达式... 43 暂停片刻... 49 使用正则表达式修改文本... 50 例子:公函生成程序... 50 ...

    Java-PHP-C#

    在几乎所有的基于UNIX/LINUX系统的软件工具中找到正则表达式的痕迹,例如:Perl或PHP脚本语言。此外,JavaScript这种客户端的脚本语言也提供了对正则表达式的支持,现在正则表达式已经成为了一个通用的概念和工具,...

    PHP基础教程 是一个比较有价值的PHP新手教程!

    mod_perl与Perl一样强大,只是更快一些。 二、PHP入门 PHP站点的在线教程已经很棒了。在那里还有一些其他教程的链接。而本文的该部分将让你对PHP熟悉一点。我不可能做到没有任何遗漏,我的目的只在于能让你迅速...

    RED HAT LINUX 6大全

    本书全面系统地介绍了Red Hat Linux 6。全书共分为五个部分,包括35章和四个附录。第一部分为Red Hat Linux的介绍和安装;第二部分为服务配置;第三部分为系统管理;第四部分为Linux编程;第五部分为附录。...

    Java正则表达式学习教程

    Java正则表达式和Perl的是最为相似的。 Java正则表达式的类在 java.util.regex 包中,包括三个类:Pattern,Matcher 和 PatternSyntaxException。 Pattern对象是正则表达式的已编译版本。他没有任何公共构造器,我们...

    freemarker总结

    后紧跟内建函数,就可以通过内建函数来轮换输出变量.下面是常用的内建的字符串函数: html:对字符串进行HTML编码 cap_first:使字符串第一个字母大写 lower_case:将字符串转换成小写 upper_case:将字符串转换成大写...

    Tcl_TK编程权威指南pdf

    作为一种脚本语言,Tcl与其他的Unix shell语言,如Bourne Shell(sh)、C Shell(csh)、Korn Shell以及Perl类似。Shell程序可以让你执行其他的程序。它们提供了足够的可编程特性(变量、流程控制和过程),使你可以将现有...

    JavaScript系列文章:详解正则表达式基本知识

    正则表达式是一个精巧的利器,经常用来在字符串中查找和替换,JavaScript语言参照Perl,也提供了正则表达式相关模块,开发当中非常实用,在一些类库或是框架中,比如jQuery,就存在大量的正则表达式,所以说学好正则...

    正则表达式

    JavaScript采用的是Perl语言正则表达式语法的一个相当完整的子集. 正则表达式的模式规范是由一系列字符构成的.大多数字符(包括所有字母数字字符)描述的都是按照字面意思进行匹配的字符.这样说来,正则表达式/java/...

Global site tag (gtag.js) - Google Analytics