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进制转换为十进制。当字符以0x或x开头时会自动被认为是十六进制数
    • 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. ABAP 图形练习(GFW_PRES_SHOW and GRAPH_2D)

    创建屏幕0100(元素清单中含定制控制CONTAINER和OK_CODE) 创建GUI状态100(功能键含BACK和EXIT用于返回和退出 ) 代码 *&------------------- ...

  2. [小结] 中山纪念中学2018暑期训练小结(划掉)(颓废记)-Day10

    [小结] 中山纪念中学2018暑期训练小结(划掉)(颓废记)-Day10 各位看众朋友们,你们好,今天是2018年08月14日,星期二,农历七月初四,欢迎阅看今天的颓废联编节目 最近发生的灵异事件有 ...

  3. 基础项目构建,引入web模块,完成一个简单的RESTful API 转载来自翟永超

    简介 在您第一次接触和学习Spring框架的时候,是否因为其繁杂的配置而退却了?在你第n次使用Spring框架的时候,是否觉得一堆反复粘贴的配置有一些厌烦?那么您就不妨来试试使用Spring Boot ...

  4. text-decoration:[ text-decoration-line ] || [ text-decoration-style ] || [ text-decoration-color ] 默认值:

    css3中字体装饰,多样化的界面效果,: [ text-decoration-line ]:指定文本装饰的种类.相当于CSS2.1的 text-decoration 属性, 可取值:none | un ...

  5. [升级说明] Senparc.Weixin.MP v14.8.11 (微信群发接口调整)

    升级内容:添加根据标签群发接口,重构原根据分组群发接口  参考微信文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp14811 ...

  6. MySQL如何使用索引

    初始化测试数据 创建一个测试用的表 create table dept(id int primary key auto_increment , deptName varchar(32) not nul ...

  7. Java面试集合(六)

    1. abstract抽象 什么是abstract,中文为抽象,从具体事物抽出,概括它们共同的方面,本质属性与关系等,称为抽象.看不见,摸不着的东西叫做抽象,抽象是人们对世界万物的感觉,用特定的图像表 ...

  8. 寒假小软件开发记录06--apk生成

    先在strings.xml中修改了软件名称,再修改软件图标. 在Android模式下,进入Image Asset,进行图标的修改: android studio中,build->generate ...

  9. python 读取wav 音频文件的两种方式

    python 中,常用的有两种可以读取wav音频格式的方法,如下所示: import scipy from scipy.io import wavfile import soundfile as sf ...

  10. 提纲挈领webrtc音频处理算法之写在前面的话

    最近工作用到了webrtc,发现webrtc是个宝库,里面有很多东西值得好好研究. 搜了这方面不少资料,发现介绍使用webrtc的不少,但是针对里面一些算法研究的 不多.特别是能把算法说的简洁明了的更 ...