Perl split字符串分割函数用法指南

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

Perl split函数

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

Perl split函数可以这样使用:

代码如下:

$info="Caine:Michael:Actor:14,LeafyDrive"; 
@personal=split(/:/,$info);

其结果是:@personal=("Caine","Michael","Actor","14,LeafyDrive");

◆如果我们已经把信息存放在$_变量中,那么可以这样:

代码如下:

@personal=split(/:/);

如果各个域被任何数量的冒号分隔,可以用RE代码进行分割: 


代码如下:

$_="Capes:Geoff::Shotputter:::BigAvenue"; 
@personal=split(/:+/);

其结果是:@personal=("Capes","Geoff","Shotputter","BigAvenue");

但是下面的代码:

代码如下:

$_="Capes:Geoff::Shotputter:::BigAvenue"; 
@personal=split(/:/);

的结果是:@personal=("Capes","Geoff","","Shotputter","","","BigAvenue");

◆这个Perl split函数中单词可以被分割成字符,句子可以被分割成单词,段落可以被分割成句子:

代码如下:

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

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

//之间的部分表示split用到的正则表达式(或者说分隔法则)
\s是一种通配符,代表空格
+代表重复一次或者一次以上。
所以,\s+代表一个或者一个以上的空格。
split(/\s+/,$line)表示把字符串$line,按空格为界分开。
比如说,$line="你好朋友欢迎光临我的网站jb51.net";
split(/\s+/,$line)后得到:
你好朋友欢迎访问我的网站jb51.net

一般用法: @somearray = split(/:+/, $string ); #括号可以不要。  若不指定$string, 则对默认变量$_操作, 两斜线间为分割符,可以用正则表达式,强悍异常。

在perl手册里,有一个用法不多见。即: split /PATTERN/, EXPR, LIMIT;  关键就是这个LIMIT参数,可以节省不少事情。 如果使用了LIMIT,且是正数,表示分割成不多于LIMIT指定的数目的域。If LIMIT is unspecified or zero, trailing null fields are stripped (which potential users of pop would do well to remember). If LIMIT is negative, it is treated as if an arbitrarily large LIMIT had been specified. Note that splitting an EXPR that evaluates to the empty string always returns the empty list, regardless of the LIMIT specified.

通过制定LIMIT,可以在很长(分割产生几万个元素or域)的行分割操作中,只返回关键的前几列的域值,减少了内存使用及时间消耗。比如一般的基因型数据,第一列通常是材料命名,需要通过材料名的判断取舍,这时候就可以这样用。 my ($firstfield) = split /\t/, $someline, 1;  如果需要前面几列的值,这样的方式对大文件效率很好: my (undef, $var1, undef, undef, undef, $var2)=split /\t/, $someline, 6;

有网友对这种方式做了测试,显示较好。引用如下:
>>>
一个文件,每行都有18项,各项之间用\t分割,使用时用到了第6项,折腾了几种用法

代码如下:

my @array = split("\t",$_); my $var = $array[6];   测试文件平均用时8.2s
 my($var) = (split("\t",$_))[6];  测试平均用时5.1s
 my(undef,undef,undef,undef,undef,undef,$var) = split("\t",$_); 平均用时3.53s
 my(undef,undef,undef,undef,undef,undef,$var) = split("\t",$_,7);平均用时3.52s
 my $var = (split("\t",$_,7))[6]; 平均用时3.53s

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

自己动手测试下吧。

(0)

相关推荐

  • php+正则将字符串中的字母数字和中文分割

    如:$str="php如何将字 符串中322的字母数字sf f45d和中文_分割?";按数字或字母分割. 复制代码 代码如下: $str = "php如何将字 符串中322的字母数字Asf f45d和中文_分割?";$arr = preg_split("/([a-zA-Z0-9]+)/", $str, 0, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);  print_r($arr); 结果 复制

  • ASP中Split分割字符串函数的实例用法

    ASP中Split函数的用法 分割截取字符串看几个例子就能理解了 复制代码 代码如下: mystr="1,2,3,4,5" mystr=split(mystr,",") for i=0 to ubound(mystr) response.write mystr(i) next  '返回值为123456 mystr="xlei.net/http/student/x/index.asp" mystr=split(mystr,"/http/s

  • php字符串分割函数explode的实例代码

    array explode (string $separator, string $string [, int $limit]) 该函数有3个参数,第一个参数$separator设置一个分割字符(串).第二个参数$string指定所要操作的字符串.$limit参数是可选的,指定最多将字符串分割为多少个子串.该函数返回一个由被分割的子串组成的数组. 来看下面的例子,对一个由逗号分隔的多行文本数据进行分析.例1,分割字符串. 复制代码 代码如下: <?php$this_year = 2013;$te

  • js split 的用法和定义 js split分割字符串成数组的实例代码

    关于js split的用法其它也不多说什么,下面直接举例给大家看看 复制代码 代码如下: <script language="javascript"> str="2,2,3,5,6,6"; //这是一字符串 var strs= new Array(); //定义一数组 strs=str.split(","); //字符分割 for (i=0;i<strs.length ;i++ ) { document.write(strs[i

  • Perl split字符串分割函数用法指南

    本文和大家重点讨论一下Perl split函数的用法,Perl中的一个非常有用的函数是Perl split函数-把字符串进行分割并把分割后的结果放入数组中.这个Perl split函数使用规则表达式(RE),如果未特定则工作在$_变量上. Perl split函数 Perl中的一个非常有用的函数是Perl split函数-把字符串进行分割并把分割后的结果放入数组中.这个Perl split函数使用规则表达式(RE),如果未特定则工作在$_变量上. Perl split函数可以这样使用: 复制代码

  • php字符串分割函数用法实例

    本文实例讲述了php字符串分割函数用法.分享给大家供大家参考.具体分析如下: php中explode 和 split 函数用来分割字符串. explode函数语法如下 explode(substring, string) explode函数通过子字符串进行分割,效率比split要高 split函数语法如下 split(pattern, string) split通过正则表达式对字符串进行分割,效率相对explode要低,但是功能强大 <?php $list = explode("_&quo

  • Android中Split()字符串分割特殊用法案例详解

    split()分割字符串 1.不同环境下的区分 Java:分割字符串不能写成split("$")//$为要分割的字符 Android:分割字符串需要加上中括号split("[$]")//$为要分割的字符 2.特殊用法--当split()分割字符串遇上特殊符号 案例分析 String str = "abc|dfg"; String[] all=str.split("|"); system.out.println(all[0]);

  • JavaScript中字符串分割函数split用法实例

    本文实例讲述了JavaScript中字符串分割函数split用法.分享给大家供大家参考.具体如下: 先来看下面这段代码: <script type="text/javascript"> var str="How are you doing today?" document.write(str.split(" ") + "<br />") document.write(str.split("&q

  • 如何在c++中实现字符串分割函数split详解

    前言 在学习c++中string相关基本用法的时候,发现了sstream的istringstream[1]可以将字符串类似于控制台的方式进行输入,而实质上这个行为等同于利用空格将一个字符串进行了分割,于是考虑到可以利用这个特性来实现c++库函数中没有的字符串分割函数split string src("Avatar 123 5.2 Titanic K"); istringstream istrStream(src); //建立src到istrStream的联系 string s1, s2

  • php指定长度分割字符串str_split函数用法示例

    本文实例讲述了php指定长度分割字符串str_split函数用法.分享给大家供大家参考,具体如下: 示例1: $str = 'abcdefgh'; $arr = str_split($str,2); 运行结果如下: array(4) { [0]=> string(2) "ab" [1]=> string(2) "cd" [2]=> string(2) "ef" [3]=> string(2) "gh"

  • C++中string字符串分割函数split()的4种实现方法

    目录 一.使用stringstream流 二.使用string类提供的find方法与substr方法 三.使用C库函数strtok 四.使用regex_token_iterator(正则表达式) 总结 如: string str1 = "This is a test"; string str2 = "This-is-a-test"; string str2 = "This+is+a+test"; 我们如何将以上字符串按照某种分隔符( ,-,+),

  • C++的字符串分割函数的使用详解

    经常碰到字符串分割的问题,这里总结下,也方便我以后使用. 一.用strtok函数进行字符串分割 原型: char *strtok(char *str, const char *delim); 功能:分解字符串为一组字符串. 参数说明:str为要分解的字符串,delim为分隔符字符串. 返回值:从str开头开始的一个个被分割的串.当没有被分割的串时则返回NULL. 其它:strtok函数线程不安全,可以使用strtok_r替代. 示例: //借助strtok实现split #include <st

  • PHP常见字符串处理函数用法示例【转换,转义,截取,比较,查找,反转,切割】

    本文实例分析了PHP常见字符串处理函数用法.分享给大家供大家参考,具体如下: <?php $s = "hello world"; //整理 echo 'trim(); ltrim(); rtrim()'; echo '<br />'; echo '长度为: '.strlen($s); echo '<br />'; //大小写 echo '首字母大写: '.Ucfirst($s); echo '<br />'; echo '每个单词首字母大写:

  • delphi字符串分隔函数用法实例

    本文实例讲述了delphi字符串分隔函数用法.分享给大家供大家参考.具体实现方法如下: 该实例可实现根据字符串Separator的表示将字符串s分隔为若干个字符串,存入rs字符串列表中,具体代码如下: 复制代码 代码如下: procedure SeparateTerms2(s:string;Separator:string;var rs:TStringList); var   AStr: string;   idx: Integer;   ASubStr: string; begin   ASt

随机推荐