正則表達式(Regular Expression),在Perl里邊通常也叫做模式(Pattern),用來表示匹配(或不匹配)某個字符串的特征模板。
使用簡單模式:若模式匹配的對象是$_的內容,只要把模式寫在一對斜線(/)中就可以了。
$_ = "yabba dabba doo"; if(/ab\tba/) {print "......";} ##所有在雙引號內的特殊字符,都可以在//內使用。
Unicode中的字符的屬性,放在\p{PROPERTY}。只要把小寫的p改成大寫,就表示否定意義。
if(/\p{Space}/) {} ##匹配空白符
if(/\p{Digit}/) {} ##匹配數字
if(/\p{Hex}\p{Hex}/) {} ##匹配十六進制數字的字符集合[0-9A-Fa-f]
元字符:點號(.)匹配任意一個字符的通配符。如果需要僅僅匹配元字符,可以加反斜線\轉義。
簡單的量詞:星號(*)用來匹配前面條目零次或多次。(.*)匹配任意多字符無限次。
加號(+)匹配前一條目一次以上。問號(?)匹配前一條目一次或沒有。
大括號{},表示具體的重復次數。 ##/a{5,15}/重復5次到15 次。
##/a{5,}/最少重復一次。
模式分組:可以用圓括號()來對字符串分組。
/fred+/與/(fred)+/ ##匹配不同量
捕獲組:可以通過反向引用來引用圓括號中的模式所匹配的文字。
if(/y(.)(.)\2\1/) {print "";} ##\1,\2分別對應順序的捕獲組,按左括號的順序來標號。匹配進行時的引用
if(/(.)\g{1}11/) {print "";} ##g{1}來顯式的指明第一個括號,避免歧義。
if(/(.)(.)\g{-1}11/) {print "";} ##g{-1}相對反向引用,指前一個捕獲組中的數據,這樣在增加捕獲組時,
保證序號不需要改變
擇一匹配:豎線(|),要么匹配左邊的內容,要么匹配右邊的內容。需要加入括號來限制范圍。
/fred( |\t)+barney/ ##匹配至少一個空格或制表符或兩個。
字符集:指出一組可能出現的字符,寫在方括號[]內表示。只匹配單個字符。在一個字符集的首部加入脫字符(^),表示否定含義。
if(/HAL-[0-9]+/) ##匹配數字0-9
[^n\-z] ##除n,連字符,z之外的任何字符。連接字符(-)在[]中含有特殊含義,所以必須加反斜線\轉義。
字符集的簡寫: /HAL-\d+/ ##\d表示任何一個數字字符集的簡寫,包括ASCII和Unicode。
if(/HAL-[\d]+/a) ##//a表示嚴格按照ASCII的范圍來匹配數字字符。
if(/\s/a) ##\s匹配任意的空白符,/\s/a表示匹配ASCII的空白符。
if(/\R/) ##\R匹配任意的斷行符。
if(/\w/) ##\w匹配[a-zA-Z0-9_],主要是匹配Perl所承認的標示符,所以會有下划線_。
相應的反義簡寫:[^\d], [^\w], [^\s]等價於\D, \W, \S。
if([\d\D]) ##匹配任意的字符,包括換行符,比元字符(.)范圍還要廣。