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"; }
執行以上程序,輸出結果為:
第一次匹配 第二次匹配
模式匹配修飾符
#模式匹配有一些常用的修飾符,如下表所示:
##x#忽略模式中的空白g全域匹配#cg全域匹配失敗後,允許再次尋找匹配字串正規表示式變數
perl處理完後會給符合的值存在三個特殊變數名稱:
$` : 匹配部分的前一部分字串
$&: 匹配的字串
#$': 還沒有符合的剩餘字串
如果將這三個變數放在一起,你將得到原始字串。
實例如下:
#!/usr/bin/perl $string = "welcome to php site."; $string =~ m/run/; print "匹配前的字符串: $`\n"; print "匹配的字符串: $&\n"; print "匹配后的字符串: $'\n";
執行上述程式輸出結果為:
匹配前的字符串: welcome to 匹配的字符串: run 匹配后的字符串: oob site.
取代運算子
取代運算元s/// 是匹配操作符的擴展,使用新的字串替換指定的字串。基本格式如下:
s/PATTERN/REPLACEMENT/;
PATTERN 為符合模式,REPLACEMENT 為替換的字串。
例如我們將以下字串的"google" 替換為"php":
#!/usr/bin/perl $string = "welcome to google site."; $string =~ s/google/php/; print "$string\n";
執行上述程式輸出結果為:
welcome to php site.
取代操作修飾符
取代運算子如下表所示:
修飾符 | 描述 |
---|---|
#i | 忽略模式中的大小寫 |
m | 多行模式 |
#o | 只賦值一次 |
s | 單行模式,"."符合"\n"(預設不符合) |
修飾符 | #描述 |
---|---|
#轉換運算子以下是轉換運算子相關的修飾符:修飾符c轉換所有未指定字元d刪除所有指定字元##s
以下實例將變數$string 中的所有小寫字母轉換為大寫字母:
#!/usr/bin/perl $string = 'welcome to php site.'; $string =~ tr/a-z/A-z/; print "$string\n";
執行上述程式輸出結果為:
WELCOME TO php SITE.
以下實例使用/s 將變數$string 重複的字元刪除:
#!/usr/bin/perl $string = 'php'; $string =~ tr/a-z/a-z/s; print "$string\n";
執行上述程式輸出結果為:
runob
更多實例:
$string =~ tr/\d/ /c; # 把所有非数字字符替换为空格 $string =~ tr/\t //d; # 删除tab和空格 $string =~ tr/0-9/ /cs # 把数字间的其它字符替换为一个空格。
更多正規表示式規則
#把多個相同的輸出字元縮成一個 |
#表達式 | 描述 |
---|---|
#匹配一個數字的字元,和[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 變數,以此類推下去. | |