Perl函數:字符串相關函數

Perl字符串相關函數

字符串的內置函數有:html

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.修改字符串scala

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

2.修改hashcode

%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";

執行返回:htm

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。blog

  • 反轉列表時,將返回反序的列表
  • 當放在標量上下文時,將作字符串反轉
  • 當反轉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

標量上下文下:串聯各元素獲得一個標量,而後反轉這個標量,即便反轉目標是列表ci

@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。

相關文章
相關標籤/搜索