如果在Unix中曾經使用過sde,awk,grep這些指令的話,相信對于 Perl 語言中的常規表達式(Regular Expression)應該不會感到陌生才對。在Perl語言中因為有這個功能,所以對于字符串的處理能力是非常強有力的。Regular Expression可視為用來處理字符串的一種模式(pattern),其使用的格式為/pattern/。在Perl語言的程序中,經??梢钥吹筋愃普Z法的應用,在CGI程序設計中也不例外。只要能夠善用常規表達式的話,要處理任何難的字符串皆可迎刃而解,在本章中筆者會用深入淺出的方式來介紹Regular Expression的用法。
常規表達式(Regular Expression)也譯作正則表達式或文字處理模式,是指定模式的一種方法,這種模式對文本進行篩選,只匹配特定的字符串。一旦匹配到了一個字符串,就可以從大量的文本中將其抽取出來,或者利用另一個字符串來替代這個字符串。
常規表達式也是初學Perl者的難點所在,但一旦掌握其語法,它們就擁有幾乎無限的模式匹配能力,而且Perl編程的大部分工作都是掌握常規表達式。
一 常規表達式中,/pattern/常用到的語法
/pattern/ 結果
除了換行字符\n外,找尋只有一個字符的字符串
x? 找尋0個或是1個x字符
x* 找尋0個或是0個以上的x字符
.* 找尋0個或是0個以上的任何字符
x+ 找尋0個或是1個以上的x字符
.+ 找尋1個或是1個以上的任何字符
{m} 找尋剛好是m個個數指定的字符
{m,n} 找尋在m個數個數以上,n個個數以下指定的字符
{m,} 找尋m個個數以上指定的字符
〔〕 找尋符合〔〕內的字符
〔^〕 找尋不符合〔〕內的字符
〔0-9〕 找尋符合0到9的任何一個字符
〔a-z〕 找尋符合a到z的任何一個字符
〔^0-9〕 找尋不符合0到9的任何一個字符
〔^a-z〕 找尋不符合a到z的任何一個字符
^ 找尋字符開頭的字符
$ 找尋字符結尾的字符
\d 找尋一個digit(數字)的字符,和〔0-9〕語法一樣
\d+ 找尋一個digit(數字)以上的字符串,和〔0-9〕+語法一樣
\D 找尋一個non-digit(非數字)的字符,和〔^0-9〕語法一樣
\D+ 找尋一個non-digit(非數字)以上的字符,和〔^0-9〕+語法一樣
\w 找尋一個英文字母或是數值的字符,和〔a-zA-Z0-9〕語法一樣
\w+ 找尋一個以上英文字母或是數值的字符,和〔a-zA-Z0-9〕+語法一樣
\W 找尋一個非英文字母,數值的字符,和〔^a-zA-Z0-9〕語法一樣
\W+ 找尋一個以上非英文字母,數值的字符,和〔^a-zA-Z0-9〕+語法一樣
\s 找尋一個空白的字符,和〔\n\t\r\f〕一樣