Perl 學習筆記 正規表示式基礎篇

2022-03-15 14:57:49 字數 2268 閱讀 6128

1.perl中的正規表示式

在perl中叫做模式, 是乙個匹配(或不匹配)某字串的模板, 是一種小程式, 對於乙個字串, 要麼匹配, 要麼不匹配.

使用簡易模式: 將模式寫在一對正斜線(/)中即可.

2.元字元

.  匹配非換行符 \n 的任何單字元, 需要注意的是轉義字元如 \t  算做乙個字元. 匹配 .  應該使用 \.

*  匹配前面的內容0次或多次, 使用  .* 表示匹配任意單字元任意次(這種模式也稱為撿破爛模式)

+  匹配前面的內容至少1次

?  匹配前面的內容至多1次

3.模式分組

使用圓括號 () 來分組, 它也是乙個元字元.

分組可以實現反向引用, 如 \1 就是在使用第乙個分組, \2 使用第二個分組 如:  /(.)\1/ 表示匹配連續2個相同的字元, 使用  /(.)(.)\2\1/ 可以得到4個字元的回文串; 分組的依據是左括號從左到右的序號, 從1開始, 如連續4個字元回文串也可以寫作 /((.)(.)\3\2)/

分組編號的處理: perl的原則是貪心取最大值,  所以\111 是第111號組, 如果只是想用\1, 而且在後面匹配字元"11",那就會衝突;  可以使用\g來避免,  其中當n為正數時, 表示從左到右的第n個組,  當為負數時, 表示相對於當前從右往左數的第n個組. 

4.選擇匹配

使用符號 |  , 只要在多個模式中有乙個匹配即可, 由於乙個模式要麼匹配,要麼不匹配, 乙個字串一般只匹配乙個模式, 所以沒有 類似於取反和求交集的邏輯操作.

5.字符集

定義: 指一串可能出現的字元集合, 寫在  中表示, 它只匹配單個字元, 但是可以使字符集中的任何乙個; 如  [a-cw-z]

[a-za-z0-9_]

簡寫: [0-9] <=> \d

[a-za-z0-9_] <=> \w

[\f\t\n\r ] <=> \s #

主要\r後面有乙個空格

反義簡寫:  [^\d] [^\w] [^\s] 分別表示非數字, 非單詞字元, 非空白符; 對應等價於: \d  \w  \s

注意:  ^ 在字符集中才表示反義簡寫, 但是在模式中表示開頭, 結尾對應  $  , 如  /^perl/ 表示以perl開頭的字串

6.正規表示式使用

匹配:m/;/ (還可以簡寫為 /;/ ,略去 m)

替換:s/;/;/

轉化:tr/;/;/

符號:  =~  表示匹配,  !~  表示不匹配

$roger = "

aabcdef";

$roger = "

aabcdef";

$count = $roger =~ tr/a/h/c; #

/c表示將不匹配的字元替換, 同理有/d表示把所有匹配的字元全部替換

$count2 = $roger =~ tr/a/h/; #

將匹配的字元替換,省略了/d 即: tr/a/h/d;

print

$count."

\t".$roger."

\n"; #

5 aahhhhh

print

$count2."

\t".$roger."

\n"; #

2 hhbcdef

$roger = "

aabcdef";

$count = $roger =~ tr/a/h/ds; #

/s表示要替換的字串中如果持續連續兩個相同字元,就去掉冗餘的

print

$count."

\t".$roger."

\n"; #

2 hbcdef

2種用法:

$roger = "

aabcdef";

$count = $roger =~ tr/a//; #

等價於tr/a/a/; 統計模式出現的次數, 不會改變原串

print

$count."

\t".$roger."

\n"; #

2 aabcdef

$count = $roger =~ tr/[a-z]/[a-z]/; #

替換成小寫

print

$count."

\t".$roger."

\n"; #

7 aabcdef

可以在替換的時候使用反向引用 s/(word1)(word2)/$2$1/  這樣可以交換字串的word1和word2,注意後面是$2 $1

perl學習筆記 正規表示式

匹配除換行符以外的所有字元 c.i 找到c後面跟著二個任意字元,再跟著i的字串 x?匹配0次或一次x字串 x 匹配0次或多次x字串,但匹配可能的最少次數 x 匹配1次或多次x字串,但匹配可能的最少次數 匹配0次或一次的任何字元 匹配1次或多次的任何字元 匹配剛好是m個的指定字串 匹配 m個 以上 的...

Perl學習筆記(6) 正規表示式

通用量詞,可以用 表示大於等於1個,表示大於0次,表示0或1次。而通過 指定指定重複次數,比如 可以用 1,表示,用 0,1 替換s pattern replacement 預設是對匹配的第乙個進行替換,如果加上 g可以進行全域性替換,即匹配所有進行替換。split 根據分割符拆分乙個字串為列表。f...

Perl 正規表示式

正規表示式文中列表 將下乙個字元標記為乙個特殊字元 或乙個原義字元 或乙個後向引用 或乙個八進位制轉義符。匹配輸入字串的開始位置。如果設定了 regexp 物件的multiline 屬性,也匹配 n 或 r 之後的位置。匹配輸入字串的結束位置。如果設定了 regexp 物件的multiline 屬性...