加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl系列:字符串操作(非正则表达式)

发布时间:2020-12-15 21:00:47 所属栏目:大数据 来源:网络整理
导读:1、tr/查找字符表/替换字符表/ds 对字符串里的字符逐个扫描,把每个查找字符表里的字符,替换为替换字符表里对应的字符。 ????$a='abcdefg'; $a =~ tr/abc/ABC/;??? #将a、b、c分别替换为A、B、C 当替换字符表长度小于查找字符表时,则自动复制其最后一个字
1、tr/查找字符表/替换字符表/ds
对字符串里的字符逐个扫描,把每个查找字符表里的字符,替换为替换字符表里对应的字符。
????$a='abcdefg'; $a =~ tr/abc/ABC/;??? #将a、b、c分别替换为A、B、C
当替换字符表长度小于查找字符表时,则自动复制其最后一个字符直至补足。
????$_ = <>; tr/0-9/*/;??? #将输入的所有数字替换成*。
当替换字符表为空时,则自动复制查找字符表,实际上不发生替换。常用于指定字符计数。
???? $_ = <>; $count=tr/0-9//;??? #计算输入字符串里数字的个数
如果查找字符表里有重复字符,则只有第一个有效
?????$a='abcdefg'; $a =~ tr/aaa/ABC/;??? #相当于tr/a/A/
修饰符"d":不允许替换字符表自动补足,结果将删除找到但没有对应替换的字符
?????$_ = <>; tr/0-9/*/;??? #将0替换为*,其他数字删除
修饰符"s":如果替换生成的字符里出现了重复字符序列,则合并为一个。注意:未替换部分的重复序列不压缩

????$a='abcdehhh'; $a =~ tr/abc/iii/s;??? #结果为idehhh
tr默认不允许进行变量替换,但可以使用eval实现
??? eval "tr/$search/$replace/"

2、大小写转换
l??? #将下个字符转为小写
??? print?"lABCn";??? #输出"aBC"
u??? #将下个字符转为大写
????$_=<>; print "u$_";??? #将输入单词改为首字母大写
L??? #将E为止的字符转为小写
U??? #将E为止的字符转为大写
E??? #结束L和U
??? print "ALBCEDn";??? #输出AbcD

3、使用index查找子字符串
$where=index($str,$sub);??? #返回$sub在$str中首次出现的位置。
??? #注意字符串的位置计数从0开始。
??? #如果未找到,返回-1
$where=index($str,$sub,3); ??? #可以使用第三个参数指定起始查找位置
??? #利用循环可以重复搜索所有出现的位置

$where=rindex($str,$sub));??? #从后往前查,返回$sub在$str中最后出现的位置。
??? #也可以使用第三个参数,指定起始查找位置的最大值

4、从字符串中提取片段
substr (字符串,起始位置,长度,替换字符串)
??? 字符串的位置计数从0开始
??? 如果长度设置超过了字符串结尾,只能得到起始位置到结尾的部分,不会自动延长。但如果就是想得到起始到结尾的部分,只需省略长度参数即可。
??? 起始位置和长度都可以是负数。长度取负数时指的是停止位置,而不是反方向计数。片段提取只能从左往右,不能反方向。
??????? substr ("abcde",3,10);??? #返回"de"
??????? substr ("abcde",3);??? #返回"de"
??????? substr ("abcde",-2);??? #返回"de"
??????? substr ("abcde",1,-1);??? #返回"bcd"
??????? substr ("abcde",-3);??? #无匹配
??? 替换字符串不必和提取片段等长。有两种方式可以进行替换。
??????? $_="abcde"; $a=substr ($_,2,"12345");??? #替换为ab12345e,但该表达式返回被替换的字符串,即"cd"
??? ??? print "$_n$an";??? #第一行ab12345e,第二行cd
????????$_="abcde"; substr ($_,2)="12345"; print "$_n";??? #输出ab12345e

5、几个特殊运算符 length()??? #字符串长度,注意"n" lc()??? #将字符串小写 uc()??? #将字符串大写 reverse()??? #将字符串反排,注意必须用于标量上下文中

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读