Perl中的正則表達式(五)


正則表達式(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])        ##匹配任意的字符,包括換行符,比元字符(.)范圍還要廣。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM