Perl字符串相关函数

字符串的内置函数有:

chomp, chop, chr, crypt, fc, hex, index, lc, lcfirst, length, oct,
ord, pack, q//, qq//, reverse, rindex, sprintf, substr, tr///, uc, ucfirst, y///

分为几类:

  • 字符大小写转换类:

    • lc:(lower case)将后面的字母转换为小写,是\L的实现
    • lcfirst:将后面第一个字母转换为小写,是\l的实现
    • uc:(uppercase)将后面的字母转换为大写,是\U的实现
    • ucfirst:将后面第一个字母转换为大写,是\u的实现
    • fc:(foldcase)和lc基本等价,只不过fc可以处理UTF-8类的字母
  • 字符处理类函数:
    • chomp:去除行尾换行符
    • chop:去除行尾字符,后文详细示例chop
    • reverse:反转列表、标量字符串、hash,后文详细示例[reverse(#blogreverse)]
    • substr:获取字串,后文详细示例substr
    • tr///:字符映射,见tr///
    • y///:等价于tr///
  • 字符位置索引:
    • index:获取字符所在索引位置,后文详细示例index和rindex
    • rindex:也是获取字符所在索引位置,后文详细示例index和rindex
  • 进制转换类:
    • hex:将16进制转换为十进制。当字符以0xx开头时会自动被认为是十六进制数
    • oct:将8进制转换为十进制。当字符以0开头时会自动被当作8进制数
    • ord:将字符串的第一个字符转换为ascii码
    • chr:将ascii转换为对应的字符
  • 其他类:
    • crypt:(暂时略)
    • length:返回字符串字符数量,后文详细示例length
    • pack:(暂时略)
    • q//:相当于给字符串加单引号(quote)
    • qq//:相当于给字符串加双引号(double quote)
    • sprintf:(略)printf的不输出版,不用于输出,而用于返回本该输出的内容

chop

和chomp有点类似。

  • chop去除行尾字符,返回行尾去除的字符
  • 修改hash的时候,去除每个value的最后一个字符,而不是最后一个key,并返回最后一个value被删除的字符
  • 修改列表时,去除每个元素的最后一个字符

1.修改字符串

$str="abnc";
print chop $str; # 输出c
print $str; # 输出abn

2.修改hash

%myhash=(name => "malongshuai",
prov => "jiangxi",
sch => "linchuan"
); $choped = chop %myhash; while(($key,$value) = each %myhash){
print $key,":","$value\n";
} print "=" x 9,"\n";
print "$choped";

执行返回:

prov:jiangx
sch:linchua
name:malongshua
=========
i

3.修改列表

@list=qw(aaa bbb ccc ddd);
chop @list; # 返回aa bb cc dd
print "@list";

reverse

reverse用于反转列表、标量字符串、hash。

  • 反转列表时,将返回反序的列表
  • 当放在标量上下文时,将做字符串反转
  • 当反转hash时,将把value反转成key,所以当value有重复值时,反转时会丢弃一部分键值
  • reverse不是作用在原始内容上的,而是通过返回值返回反转结果

反转列表:将元素反转

@arr=qw(abc def ghi);

@arr=reverse @arr;
print "@arr"; # 输出(ghi def abc) print join(",",reverse "hello","world") ; # 输出:world,hello

标量上下文下:串联各元素得到一个标量,然后反转这个标量,即使反转目标是列表

@arr=qw(aA bB cC dD );

print scalar reverse @arr;   # 输出:DdCcBbAa
print "\n";
print @arr; # 输出:aAbBcCdD

反转字符串

print scalar reverse "hello";  # 输出olleh

反转hash:会把value反转成key,所以value重复时,将丢弃一部分键值


%arr=qw(aA bB cC dD ); %arr1=reverse %arr;
while(($key,$value)=each %arr1){
print "$key -> ","$value","\n";
}

执行结果:

dD -> cC
bB -> aA

substr

用于从给定字符串中提取出一段子字符串。

用法:

substr STRING,OFFSET,LENGTH,REPLACEMENT
substr STRING,OFFSET,LENGTH
substr STRING,OFFSET

其中:

  • offset从0开始计算
  • offset为负数时,表示从尾部位移(从-1开始计算)往前位移
  • length如果忽略,则从offset处开始取到最尾部
  • length为负数时,length则表示从后往前的位移位置,所以将提取从offset到length处的子串
  • replacement替换string中提取出来的字串。需要注意两点:
    • 加了replacement,将返回提取的子串
    • 但源字符串STRING已被替换
use 5.010;
$str="love your everything"; say substr $str,5; # 输出:your everything
say substr $str,-10; # 从后往前取:everything
say substr $str,5,4; # 从前往后取4个字符:your
say substr $str,5,-3; # 从位移5取到位移-3(从后往前算):your everyth
say substr $str,5,4,"fairy's"; # 替换源字符串,但返回提取子串:your
say $str; # 源字符串已被替换:love fairy's everything

可以将substr函数作为左值(lvalue),这样可以修改源变量,就像给了replacement参数一样:

use 5.010;
$str="love your everything"; substr($str,5,4) = "fairy's";
say $str; # 源字符串已被替换:love fairy's everything

index和rindex

index和rindex用来找出给定字符串中某个子串或某个字符的索引位置。

用法:

(r)index STRING,SUBSTR,POSITION
(r)index STRDING,SUBSTR
  • index用于搜索STRING中第一次出现SUBSTR的位置,rindex则搜索最后一次出现的SUBSTR位置
  • 如果省略position,则从起始位置(从0开始计算)开始搜索第一次出现的子串
  • 给定position,则从position处开始搜索,如果是rindex,则是找position左边的
  • 如果STRING中找不到SUBSTR,则返回-1
use 5.010;
$str="love you and your everything"; say index $str,"you"; # 输出:5
say index $str,"yours"; # 输出:-1
say index $str,"you",136; # 输出:-1
say index $str,"you",6; # 从offset=6之后搜索,输出:13
say rindex $str,"you"; # 输出:13
say rindex $str,"you",10; # 找出offset=10左边的最后一个you,输出:5

length

用于返回字符串的字符数量,不是字节数。如果是字节数,则采用unicode模块。

下面的例子中,将输出11。

$str="hello world";
print length $str;

length不能直接作用于数组和hash来统计元素个数。想要统计个数:

  • 对于数组,直接将其放在标量上下文即可
  • 对于hash,可使用keys函数返回hash键,然后放进标量上下文
# 数组元素个数
@arr=qw(aaa bbb ccc ddddd eee ff);
print scalar @arr; # 输出6 # hash元素个数
%myhash=qw(aaa bbb ccc ddddd eee ff);
print scalar keys %myhash;

如果length的对象未定义,则返回undef。如果length的对象没有字符但已定义,则返回0。

Perl函数:字符串相关函数的更多相关文章

  1. db2字符串相关函数的使用

    db2字符串相关函数的使用 from :internet    一.字符转换函数 1.ASCII() 返回字符表达式最左端字符的ASCII 码值.在ASCII()函数中,纯数字的字符串可不用‘’括起来 ...

  2. Linux下常用函数-字符串函数

    inux下常用函数-字符串函数 atof(将字符串转换成浮点型数)  相关函数   atoi,atol,strtod,strtol,strtoul 表头文件   #include <stdlib ...

  3. 【转载】Perl中字符串编码的处理

    在 Perl看来, 字符串只有两种形式. 一种是octets, 即8位序列, 也就是我们通常说的字节数组. 另一种utf8编码的字符串, perl管它叫string. 也就是说: Perl只熟悉两种编 ...

  4. javascript函数一共可分为五类: ·常规函数 ·数组函数 ·日期函数 ·数学函数 ·字符串函数

    javascript函数一共可分为五类:    ·常规函数    ·数组函数    ·日期函数    ·数学函数    ·字符串函数    1.常规函数    javascript常规函数包括以下9个 ...

  5. Sass函数--字符串函数

    Sass的函数简介在 Sass 中除了可以定义变量,具有 @extend.%placeholder 和 mixins 等特性之外,还自备了一系列的函数功能.其主要包括: ● 字符串函数 ● 数字函数 ...

  6. 在 Perl看来, 字符串只有两种形式. 一种是octets, 即8位序列, 也就是我们通常说的字节数组. 另一种utf8编码的字符串, perl管它叫string. 也就是说: Perl只熟悉两种编

    在 Perl看来, 字符串只有两种形式. 一种是octets, 即8位序列, 也就是我们通常说的字节数组. 另一种utf8编码的字符串, perl管它叫string. 也就是说: Perl只熟悉两种编 ...

  7. ylb:SQLServer常用系统函数-字符串函数、配置函数、系统统计函数

    原文:ylb:SQLServer常用系统函数-字符串函数.配置函数.系统统计函数 ylbtech-SQL Server:SQL Server-SQLServer常用系统函数 -- ========== ...

  8. Python第二天 变量 运算符与表达式 input()与raw_input()区别 字符编码 python转义符 字符串格式化 format函数字符串格式化 帮助

    Python第二天  变量  运算符与表达式  input()与raw_input()区别  字符编码  python转义符  字符串格式化  format函数字符串格式化  帮助 目录 Pychar ...

  9. mssql 系统函数-字符串函数专题--字符串函数大全

    mssql 系统函数 字符串函数 substring 功能简介 mssql 系统函数 字符串函数 stuff 功能简介 mssql 系统函数 字符串函数 str 功能简介 mssql 系统函数 字符串 ...

随机推荐

  1. Python开发——10.面向对象编程进阶

    一.isinstance(obj,cls)和issubclass(sub,super) 1.isinstance(obj,cls) 判断obj是不是由cls产生的类 2.issubclass(sub, ...

  2. Exp7 网络欺诈防范

    Exp7 网络欺诈防范 20154305 齐帅 一.实践内容 本实践的目标理解常用网络欺诈背后的原理,以提高防范意识,并提出具体防范方法.具体实践有 (1)简单应用SET工具建立冒名网站 (2)ett ...

  3. CSS3背景相关新增属性

    background-clip border-box:充满边框和内边距,内容. padding-box:充满内边距,内容 content-box:只充满内容 background-origin bor ...

  4. Servlet创建完美教程

    简介:Servlet其实是Server Let的缩写,是服务器端应用程序.  java中有一个applet是客户端应用程序,与servlet对应.applet已经过时.Servlet作用:能在B/S架 ...

  5. SLAM算法中提取特征总结

    我们要知道三维空间中的点在图像中的位置,就需要提取特征与特征匹配了. 1.检测特征点 2.计算描述子 3.特征匹配 1.检测特征点 我们用到的检测特征点的方法是FAST算法,最大的特点就是快! 算法原 ...

  6. Redis-01.初探

    官网 http://redis.io 中文网 http://redis.cn 命令参考 http://redisdoc.cn Redis(Remote Dictionary Server)是一个开源的 ...

  7. [转]SDN与OpenFlow技术简介

    http://blog.163.com/s_zhchluo/blog/static/15014708201411144727961/ 本文是2012年文章,对Openflow的发展.规范.应用和SDN ...

  8. Windows 10 IoT Core 17093 for Insider 版本更新

    新特性:  General bug fixes Enabled Miracast on Dragonboard. 已知的一些问题:   F5 driver deployment from Visual ...

  9. web安全Wargame—Natas解题思路(1-26)

    前言: Natas是一个教授服务器端Web安全基础知识的 wargame,通过在每一关寻找Web安全漏洞,来获取通往下一关的秘钥,适合新手入门Web安全. 传送门~ 接下来给大家分享一下,1-20题的 ...

  10. CSS揭秘—多重边框(二)

    前言: 所有实例均来自<CSS揭秘>,该书以平时遇到的疑难杂症为引,提供解决方法,只能说秒极了,再一次刷新了我对CSS的认知 该书只提供了关键CSS代码,虽然有在线示例代码链接,但访问速度 ...