perl學習日記7正則表達式

1.    正則表達式

1.1      什麼是正則表達式?

我們將正則表達式看作一種由簡單語言實現的程序,這種語言只有一個任務:查找某個字符串,返回匹配上(it matches)”或者不匹配(it doesnot match)”。這就是它完成的所有工作。

1.2      使用簡單的模式

$_ =“yabba dabba doo”;

if(/abba/){

print “It matched!/n”;

}

所有在雙引號中的轉義字符在模式中均有效,因此你可以使用/coke/tsprite/來匹配11 個字符的字符串coke, tab(製表符)sprite

1.2.1.元字符

(.)是通配符,它可以匹配任何單個的字符,但不包括換行符(“/n”)

如果只希望點(.)匹配句號,可以使用反斜線。這條規則對Perl 正則表達式中所有元字符均有效:元字符前使用反斜線將使它變成普通的字符。如,模式/3/.14159/中的點(.)即不是通配符。

1.2.2.簡單的量詞

星號(*)表示匹配前一項次或者多次。因此,/fred/t*barney/將匹配上fred barney

之間有任意個製表位(tab)的字符串。它可以匹配fred/tbarney,其間有一個tab;匹配fred/t/tbarney,其間有兩個製表位;fred/t/t/tbarney其間有三個製表位;fredbarney,其間什麼也沒有。其間可以是任意個製表符,但不能是其它的字符。

 

因此.*將匹配任意字符任意多數,這就是說模式/fred.*barney/將匹配fred,barney 之間有任意多個任意字符(不含換行符)的字符串

 

(+)也是。加(+)的意思是可以匹配前面一項的一個或多個:/fred +barney/意思是fred barney 之間由空格分開,且只能是空格

 

問號(?),其含義是前面一個項出現一次,或者不出現。也就是說,前面這個項出現次或者次,此外不會有其它情況。因此,/barm-?bamm/只匹配:bamm-bamm bammbamm

 

1.2.3.模式中的分組

括號(())用來表示分組,模式/(fred)+/能匹配上像fredfredfred 這樣的字符串,這更可能是你所希望的。那麼模式/(fred)*/?它將匹配上像hello,world 這樣的字符串

1.2.4.選擇符

豎線(|),在這種用法中通常被讀作或(or,意思是匹配左邊的或者右邊的。因此,/fred|barney|betty/將匹配出現過fred,或者barney,或者betty 的字符串。

模式/fred (and|or) barney/能匹配如下兩種字符串:fred and barney, fred or barney

1.2.5.字符類

方括號[]中的一列字符,可以匹配上括號內出現的任意單個字符。

例如,字符類[abcwxyz]可以匹配上括號內七個字母中的任意一個。爲了方便,我們可以使用連字號(-)來表示某個範圍的字母,因此上例也可以寫做[a-cw-z]。上面例子省略的字符不多,但像[a-zA-Z]將非常方便,你可以使用和雙引號相同的字符簡寫方法,例如類[/000-/177]可以匹配上任意的七比特的ASCII 字符

$_ = “The HAL-9000 requires authorization to continue.”;

if(/HAL-[0-9]+/){

print “The string mentions some model of HAL computer./n”;

}

[^def]將匹配上這三個字符中之外的任意單個字符。[^n/-z]將匹配上n-之外的任何字符。

1.2.6.字符類的簡寫

任何數字的類,[0-9],可以被簡寫爲:/d。剛纔那個例子可以被寫作/HAL-/d+/

/w 被稱作“word’字符:[A-Za-z0-9_]

模式/fred /w+ barney/將匹配fred,空格,一個“單詞(word)”,然後是空格和barney

/s 對於匹配空白(whitespace)將非常方便。它等價於[/f/t/n/r ],其含個空白字符:格式符(form-feed);製表符(tab),換行符,回車,以及空格符

1.2.7.簡寫形式的補集

你可以使用[^/d][^/w][^/s],其含義分別是,非數字的字符,非word(記住我們對word 的定義)的字符,和非空白的字符。也可以使用它們對應的大寫形式:/D/W/S 來完成。

 

另一個類字符[/d/D],它的意思是任何數字,和任何非數字,則意指任何字符。甚至包括換行符,而點(.)匹配除換行符以外的任何字符。

[^/d/D]則完全沒用,因爲它匹配既非數字也非非數字的字符,那什麼也不是。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章