如何用perl,把一篇文本内的第新概念偶数课文本个函数换成字符x?

2538人阅读
PERL(17)
=================================================================================From: 這裡主要說明截取子字串、字串的長度、大小寫轉換、尋找某子字串等操作
比如:$str="mynameis"; "myn" 就是 "mynameis" 的子字串。
Perl 提供 substr 這函式,可以幫我們截取子字串。
語法:傳回子字串 = substr 字串, 開始位置, [截取長度]註:開始位置由 0 計數起,若開始位置之值為負整數,則由字串結尾開始計算截取位置,比如:-1 表示最後一個字元開始截取,-3 表示倒數第三個字元開始截取。若省略了截取長度,則表示由開始截取位置一直到字串結束。例:$str = "ABCDEFG1234567";$a = substr $str, 0, 5;
# 由第一個字元開始截取 5 個字元長度print $a;# 得:ABCDE$a = substr $str, 3, 4;
# 由第 4 個字元開始截取 4 個字元長度print $a;# 得:DEFG$a = substr $str, 5;
# 第6個字元開始截取至字串結束print $a;# 得:FG1234567$a = substr $str, -1;
# 最後一個字元print $a;# 得:7$a = substr $str, -4, 2;
# 最後第四個字元開始截取2個字元長度print $a;# 得:45
字串的長度
Perl 提供 length 函式,可用來計算字串的長度。
語法:$str="我們一起看雲去";$str_len = length($str);print $str_len, "/n/n";
轉換大小寫
Perl 提供 uc / lc 函式,可轉字串為大寫/小寫。
語法:# 轉成大寫$str = uc(字串);# 轉成小寫$str = lc(字串);$str="abCD99e";$str = uc($str);
# 此時 $str 為 ABCD99E$str = lc($str);
# 此時 $str 為 abcd99e
找尋子字串
Perl 提供 index 函式,可在字串中找尋某一子字串的起始位置。
語法:$pos = index($str1, $str2);# 找尋 $str2 在 $str1 中的起始位置
找尋子字串的最後位置
Perl 提供 rindex 函式,可在字串中找尋某一子字串最後的起始位置。
語法:$pos = rindex($str1, $str2, $pos);# 由 $str1 的 $pos 位置開始找起,找尋 $str2 在 $str1 中最後的起始位置# 若 $pos 省略,則由字串的最後面開始找。
傳回 ASCII 值
Perl 提供 ord 函式,可傳回某一字元的 ASCII 值。
語法:$num = ord(字元);用例:$num = ord('a');print "$num/n";
chr 函式,則可將 ASCII 值轉成字元。
語法:$char = chr(數字);用例:$char = chr(48);http://linux.tnc.edu.tw/techdoc/perl_intro/x348.htmlprint "$char/n";
=================================================================================From: ---------------------------------------#!/usr/bin/perl
#-----------------------------
#substr用来存取子串,可以修改子串,主要用法如下:
#$value = substr($string, $offset, $count);
#$value = substr($string, $offset);
#substr($string, $offset, $count) = $
#substr($string, $offset) = $
#-----------------------------
# 首先得到一个5个字符的字符串,然后跳过三个字符,分别得到2个8字符的字符串,最后剩下的给$trailing
#unpack/pack的用法以后会讲到,或者参见google 一下 &perl函数 unpack&
($leading, $s1, $s2, $trailing) =&&& unpack("A5 x3 A8 A8 A*", $data);
# 将字符串分成每5个字符一个串,存入数组@fives
@fivers = unpack("A5" x (length($string)/5), $string);
# 将字符串打散成单个字符,存入数组@chars
@chars = unpack("A1" x length($string), $string);#-----------------------------
$string = "This is what you have";# + Indexing forwards (left to right)
# - Indexing backwards (right to left)
# note that 0 means 10 or 20, etc. above
#下面是一些例子:
$first = substr($string, 0, 1); # "T"
$start = substr($string, 5, 2); # "is"
$rest = substr($string, 13); # "you have"
$last = substr($string, -1); # "e"
$end = substr($string, -4); # "have"
$piece = substr($string, -8, 3); # "you"
#-----------------------------
$string = "This is what you have";print $#This is what you have
substr($string, 5, 2) = "wasn't"; # 改变 "is" 为 "wasn't"
#This wasn't what you have
substr($string, -12) = "ondrous";# 替换最后12个字符
#This wasn't wondrous
substr($string, 0, 1) = ""; # 删除首字符
#his wasn't wondrous
substr($string, -10) = ""; # 删除最后10个字符
#his wasn'
#-----------------------------
# 你可以用 =~ 来测试子串,=~为正则表达式匹配运算符,后面会讲到,还可以google Perl 正则表达式
#主要是匹配则为True;否则为False。 pattern可以自己根据需要构造。
if (substr($string, -10) =~ /pattern/) {&&& print "Pattern matches in last 10 characters/n";}
# 将 "is" 换为 "at", 限制在最后五个字符;=~ s/// 为替换表达式。
substr($string, 0, 5) =~ s/is/at/g;#-----------------------------
# 将字符串$a的第一个和最后一个字符交换
$a = "make a hat";(substr($a,0,1), substr($a,-1)) = (substr($a,-1), substr($a,0,1));print $a;# take a ham
#-----------------------------
# 抽取某些子串
$a = "To be or not to be";$b = unpack("x6 A6", $a); # 跳过6个字符,抽取6个字符
print $b;# or not
($b, $c) = unpack("x6 A2 X5 A2", $a); # 跳过6个字符, 抽出2个字符的子串;后退5个字符,抽出2个字符的子串
print "$b/n$c/n";# or
#-----------------------------
#下面是一个综合的例子,主要是一个函数,实现了
#一种模板格式的输出。
sub cut2fmt {&&& my(@positions) = @_;&&& my $template = '';&&& my $lastpos = 1;&&& foreach $place (@positions) {&&&&&&& $template .= "A" . ($place - $lastpos) . " ";&&&&&&& $lastpos = $&&& }&&& $template .= "A*";&&& return $}
$fmt = cut2fmt(8, 14, 20, 26, 30);print "$fmt/n";# A7 A6 A6 A6 A4 A*
#-----------------------------=================================================================================From: perl字符串处理函数1,indexposition = index (string, substring, position)返回子串substring在字符串string中的位置,如果不存在则返回-1。参数position是可选项,表示匹配之前跳过的字符数,或者说从该位置开始匹配。
例子如下:[root@localhost ~]# echo -n '/var/fap/test/123' | perl -ne '$rev=index($_, "a"); print $rev,"/n";'2[root@localhost ~]# echo -n '/var/fap/test/123' | perl -ne '$rev=index($_, "a", 1); print $rev,"/n";'2[root@localhost ~]# echo -n '/var/fap/test/123' | perl -ne '$rev=index($_, "a", 3); print $rev,"/n";'6[root@localhost ~]# echo -n '/var/fap/test/123' | perl -ne '$rev=index($_, "a", 7); print $rev,"/n";'-1
2,rindexposition = rindex (string, substring, position)与index类似,区别是从右端匹配。
例子如下:
[root@localhost ~]# echo -n '/var/ftp/tesa/123' | perl -ne '$rev=rindex($_, "a", 11); print $rev,"/n";'2[root@localhost ~]# echo -n '/var/ftp/tesa/123' | perl -ne '$rev=rindex($_, "a", 12); print $rev,"/n";'12[root@localhost ~]# echo -n '/var/ftp/tesa/123' | perl -ne '$rev=rindex($_, "a", 1); print $rev,"/n";'-1[root@localhost ~]# echo -n '/var/ftp/tesa/123' | perl -ne '$rev=rindex($_, "a", 2); print $rev,"/n";'2
3,lengthnum = length (string)返回字符串长度,或者说含有字符的数目。
例子如下:
[root@localhost ~]# echo -n '/var/ftp/tesa/123' | perl -ne '$rev=length($_); print $rev,"/n";'17[root@localhost ~]# echo -n '/var/ftp/tesa/123 ' | perl -ne '$rev=length($_); print $rev,"/n";'19
4,substrsubstr (expr, skipchars, length)抽取字符串(或表达式生成的字符串)expr中的子串,跳过skipchars个字符,或者说从位置skipchars开始抽取子串(第一个字符位置为0),子串长度为length,
此参数可忽略,意味着取剩下的全部字符。当此函数出现在等式左边时,expr必须为变量或数组元素,此时其中部分子串被等式右边的值替换。
substr() 函数的作用有两个:替换一部分子串。 删除一部分子串。
例子如下:
[root@localhost ~]# echo -n '/var/ftp/test/123' | perl -ne '$rev=substr($_, 9,);print $rev,"/n";'test/123[root@localhost ~]# echo -n '/var/ftp/test/123' | perl -ne '$rev=substr($_, 9, 4);print $rev,"/n";'test
替换:[root@localhost ~]# echo -n '/var/ftp/test/123' | perl -ne '$rev=substr($_, 9, 4)="hello"; print $rev,"/n";'hello删除:[root@localhost ~]# echo -n '/var/ftp/test/123' | perl -ne '$rev=substr($_, 9, 4)=""; print $rev,"/n";'
5,lc,uc,lcfirst,ucfirstlc,将字符串改为小写uc,将字符串改为大写lcfirst,改变字符串首字母小写ucfirst,改变字符串首字母大写
例子如下:
[root@localhost ~]# echo -n 'hello, hanli' | perl -ne '$rev=uc($_); print $rev,"/n";'HELLO, HANLI[root@localhost ~]# echo -n 'HELLO, hanli' | perl -ne '$rev=lc($_); print $rev,"/n";'hello, hanli[root@localhost ~]# echo -n 'hello, Hanli' | perl -ne '$rev=ucfirst($_); print $rev,"/n";'Hello, Hanli[root@localhost ~]# echo -n 'hello, Hanli' | perl -ne '$rev=lcfirst($_); print $rev,"/n";'hello, Hanli
为了您的安全,请只打开来源可靠的网址
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:114287次
积分:1274
积分:1274
排名:千里之外
原创:16篇
转载:24篇
评论:15条
(2)(1)(2)(1)(1)(7)(1)(9)(14)(2)2010年5月 其他开发语言大版内专家分月排行榜第三2009年7月 其他开发语言大版内专家分月排行榜第三2005年3月 其他开发语言大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。perl 采用正则表达式替换字符串处理
替换功能和quotemeta有时候你不仅希望找到你想要那些字符串,还想替换掉它们。还记得前面说的匹配符后面的m符号么?现在是使用另一个,s符号(替换,subplace)的时候了。$string =~ s/apple/apple/i;上面表达式将$string里所有不用形式的apple统一成全小写的apple. 这里面可以用变量:$string =~ s/$string1/$string2/i;$string里所有匹配$string1的地方都会被替换成$string2。但是,要注意,除非你能确保$string1里面不含任何特殊符号(+-*^$.()[]等)或者你需要的就是那些符号,最好在调用上面式子之前处理一下$string1$string1 = quotemeta($string1);quotemeta()的作用是给字符串里的特殊符号加上合适的转义符号。注意,不需要给$string2做这个处理。
TA的最新馆藏Perl split字符串分割函数用法指南
字体:[ ] 类型:转载 时间:
本文向大家简单介绍一下Perl split函数的用法,Perl中的一个非常有用的函数是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就只能用中间数组。
自己动手测试下吧。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具一、打开、关闭文件
&&& open的返回值用来确定打开文件的操作是否成功,当其成功时返回非零值,失败时返回零,因此可以如下判断:&&& if
(open(MYFILE, "myfile")) &&& {&&&&&&& # here is what to do if the file
opened successfully&&& }&&& 当文件操作完毕后,用close(MYFILE); 关闭文件。&&&
读:open(文件句柄,"&文件名")& open(文件句柄,"文件名")&& 前提文件必须已经存在,否则会返回0,出错信息在!中&&&
写:open(文件句柄,"&文件名"),文件如果不存在,那么创建之,如果存在,内容被清空,长度截为0,!中有出错信息。&&&
追加:open(文件句柄,"&&文件名"),基本同写,但有一点,文件中的内容不会被清空,新的内容会追加到原文后面。&&&
读写:open(文件句柄,"+&文件名"),通过&+&&模式,你可以既可以读文件,又可以写文件。你可以通过tell()
函数在文件内部移动,通过seek()函数进行定位。如果文件不存在,就会被创建。如果文件已经存在,原来的数据不会被清除。
二、读文件&&&&&&&&
&&& 语句line = &MYFILE&;从文件中读取一行数据存储到简单变量line中并把文件指针向后移动一行。&&&
语句@array = &MYFILE&;把文件的全部内容读入数组@array,文件的每一行(含回车符)为@array的一个元素。
主要使用以下三个函数:
1__VE_ITEM__&O&&&&&&&& tell函数
函数tell用来确定文件中当前位置(亦即第一条记录后的那个字节)。Tell返回的值也是记录长度的字节数。
&&&&&& length = tell ( FILE );
如一条记录有3个字节长度,字节0,1和2。因而,文件中的当前位置是3,这就是一条记录的长度。
1__VE_ITEM__&O&&&&&&&& seek函数
如果记录的长度已知,函数seek可用于查找文件中的任何记录。
函数seek接受3个参数:filename、offset和method。
Offset是在文件中确定新的当前位置时,所需移动的字节数。这个数一般可以这样计算:所需跳过的记录数乘以记录的字节数。
Method指出要开始查找的位置:
0表示从文件开始处计算;
1表示从当前位置开始计算;
2表示从文件结束出开始计算(这种情况下,offset一般为负数)。&&&&&&&&&&&&&&&&&&&&&&&&&&
&seek& ( FILE,& 5*length, 0 )
执行后,他会使用计算式5*length和method为0来跳过文件的前5条记录,把第6条记录作为文件的当前位置&&&&&&&&&&&&&&&&&&
1__VE_ITEM__&O&&&&&&&& truncate函数
truncate函数接收两个参数:一个文件句柄和一个文件字节位置。它从文件字节处开始移除记录,直到文件结束。
Perl字符串处理函数
Perl字符串处理函数index
调用语法position=index(string,substring,position);解说返回子串substring在字符串string中的位置,如果不存在则返回-1。参数position是可选项,表示匹配之前跳过的字符数,或者说从该位置开始匹配。
Perl字符串处理函数rindex
调用语法position=rindex(string,substring,position);解说与index类似,区别是从右端匹配。
Perl字符串处理函数length
调用语法num=length(string);解说返回字符串长度,或者说含有字符的数目。
Perl字符串处理函数pos
调用语法offset=pos(string);解说返回最后一次模式匹配的位置。
Perl字符串处理函数substr
调用语法substr(expr,skipchars,length)解说抽取字符串(或表达式生成的字符串)expr中的子串,跳过skipchars个字符,或者说从位置skipchars开始抽取子串(第一个字符位置为0),子串长度为length,此参数可忽略,意味着取剩下的全部字符。当此函数出现在等式左边时,expr必须为变量或数组元素,此时其中部分子串被等式右边的值替换。
Perl字符串处理函数study
调用语法study(scalar);解说用一种内部格式提高变量的访问速度,同一时刻只对一个变量起作用。
Perl字符串处理函数lcuc调用语法retval=lc(string);retval=uc(string);解说将字符串全部转换成小/大写字母。
Perl字符串处理函数lcfirst
ucfirst调用语法retval=lcfirst(string);retval=ucfirst(string);解说将第一个字母转换成小/大写。
Perl字符串处理函数quotameta
调用语法newstring=quotemeta(oldstring);解说将非单词的字母前面加上反斜线(\\)。语句:string=quotemeta(string);等效于:string=~s/(\\W)/\\\\1/g;常用于模式匹配操作中,确保字符串中没有字符被看作匹配操作符。
Perl字符串处理函数join
调用语法join(joinstr,list);解说把字符串列表(数组)组合成一个长的字符串,在每两个列表元素间插入串joinstr。
Perl字符串处理函数sprintf
调用语法sprintf(string,fields);解说与printf类似,区别是结果不输出到文件,而作为返回值赋给变量。例子num=26;outstr=sprintf("%d=%xhexadecimalor%ooctal\",num,num,num);print(outstr);结果输出26=1ahexadecimalor32octal
阅读(...) 评论()

我要回帖

更多关于 perl 匹配字符串 的文章

 

随机推荐