Perl 正規表示式
正規表示式(regular expression)描述了一個字串匹配的模式,可以用來檢查一個字串是否含有某種子字串、將匹配的子字串做替換或從某個字串中取出符合某條件的子串等。
Perl語言的正規表示式功能非常強大,基本上是常用語言中最強大的,很多語言設計正規式支援的時候都參考Perl的正規表示式。
Perl的正規表示式的三種形式,分別是匹配,替換和轉換:
匹配:m/
替換:s/
轉換:tr/
這三種形式一般都和=~ 或!~ 搭配使用, =~ 表示相匹配,!~ 表示不匹配。
符合運算子
符合運算子m// 用來符合一個字串語句或一個正規表示式,例如,要符合標量$bar 中的"run",程式碼如下所示:
#!/usr/bin/perl $bar = "I am php site. welcome to php site."; if ($bar =~ /run/){ print "第一次匹配\n"; }else{ print "第一次不匹配\n"; } $bar = "run"; if ($bar =~ /run/){ print "第二次匹配\n"; }else{ print "第二次不匹配\n"; }
執行以上程序,輸出結果為:
第一次匹配 第二次匹配
模式匹配修飾符
#模式匹配有一些常用的修飾符,如下表所示:
修飾符 | 描述 |
---|---|
#i | 忽略模式中的大小寫 |
m | 多行模式 |
#o | 只賦值一次 |
s | 單行模式,"."符合"\n"(預設不符合) |
#忽略模式中的空白 | |
全域匹配 | |
全域匹配失敗後,允許再次尋找匹配字串 |
修飾符 | #描述 |
---|---|
如果在修飾符中加上"i",則正規則將會取消大小寫敏感性,即"a"和"A" 是一樣的。 | |
預設的正規開始"^"和結束"$"只是對於正規字串如果在修飾符中加上"m",那麼開始和結束會指字串的每一行:每一行的開頭就是"^",結尾就是"$"。 | |
表達式只執行一次。 | |
如果在修飾符中加入"s",那麼預設的"."代表除了換行符以外的任何字元將會變成任意字符,也就是包括換行符! | |
如果加上該修飾符,表達式中的空白字元將會被忽略,除非它已經被轉義。 | |
取代所有符合的字串。 | |
取代字串作為表達式 |
#轉換運算子以下是轉換運算子相關的修飾符:
轉換所有未指定字元 | |
刪除所有指定字元 | |
#把多個相同的輸出字元縮成一個 |
#表達式 | 描述 |
---|---|
符合除換行符以外的所有字元 | |
匹配0 次或一次x 字串 | |
符合0 次或多次x 字串,但符合可能的最少次數 | |
符合1 次或多次x 字串,但匹配可能的最少次數 | |
#匹配0 次或多次的任何字元 | |
符合1 次或多次的任何字元 | |
匹配剛好是m 個的指定字符字串 | |
符合在m個以上n個以下的指定字串 | |
符合m個以上的指定字串 | |
符合[] 內的字元 | |
符合不符合[] 內的字元 | |
符合所有數字字元 | |
匹配所有小寫字母字元 | |
匹配所有非數字字元 | |
符合所有非小寫字母字元 | |
匹配字元開頭的字元 | |
匹配字元結尾的字元 | |
#匹配一個數字的字元,和[0-9] 語法一樣 | |
匹配多個數字字串,和[0-9]+ 語法一樣 | |
非數字,其他同\d | |
非數字,其他同\ d+ | |
英文字母或數字的字串,和[a-zA-Z0-9] 語法一樣 | |
和[a-zA-Z0-9]+ 文法一樣 | |
非英文字母或數字的字串,和[^a-zA-Z0-9] 語法一樣 | |
和[^a-zA-Z0-9]+ 語法一樣 | |
空格,和[\n\t\r\f] 語法一樣 | |
和[\n\t\r\f]+ 一樣 | |
非空格,和[^\n\t\r \f] 語法一樣 | |
和[^\n\t\r\f]+ 語法一樣 | |
符合以英文字母,數字為邊界的字串 | |
符合不以英文字母,數值為邊界的字符字串 | |
符合符合a字元或是b字元或是c字元的字串 | |
符合含有abc 的字串 (pattern) () 這個符號會記得所找尋的字串,是一個很實用的語法.第一個() 內所找到的字串變成$1 這個變數或是\1 變數,第二個( ) 內所找到的字串變成$2 這個變數或是\2 變數,以此類推下去. | |
## |