綜述
正則表達式是一種可以用於模式匹配和替換的強有力的工具。正則表達式可以讓用戶通過使用一系列的非凡字符構建匹配模式,然後把匹配模式與數據文件、程序輸入以及WEB頁面的表單輸入等目標對象進行比較,根據比較對象中是否包含匹配模式,執行相應的程序。
如何使用基本模式匹配?
模式,是正規表達式最基本的元素,它們是一組描述字符串特征的字符。模式可以很簡單,由普通的字符串組成,也可以非常復雜,往往用非凡的字符表示一個范圍內的字符重復出現,或表示上下文。我們先看一些正則表達式中的非凡字符。
非凡字符"^"用來匹配以指定字符串開頭的字符串。例如:
"^hello" :這個模式與字符串"hello,PHP world!"匹配,但是與"Say hello to you"不匹配。
非凡字符"$"用來匹配以指定字符串結尾的字符串。例如:
"you$" :這個模式與"How are you"匹配,與"your"不匹配。
當非凡字符"^"和"$"同時使用時,表示精確匹配。例如:
"^hello$" :這個模式只匹配字符串"hello"。
假如一個模式不包括"^"和"$",那麼它與任何包含該模式的字符串匹配。例如: "you" :與字符串"What is your name?"是匹配的。
在該模式中的字母只是普通的字符,數字也是一樣的。
假如要用到其他一些稍微復雜的字符,如標點符號和空白字符(比如空格、制表符等),就要要用到轉義序列。所有的轉義序列都用反斜槓("")打頭,例如制表符的轉義序列是:"t"。所以假如我們要檢測一個字符串是否以制表符開頭,可以用這個模式:
"^t"
類似的,用"n"表示換行,"r"表示回車,反斜槓本身用""表示,句號"."用"."表示,依此類推。
如何使用字符簇?
假如要判定用戶輸入的電話號碼、地址、EMAIL地址、信用卡號碼等是否有效,用普通的基於字面的字符串比較是不夠的。所以要用一種更好的方法來描述我們想要的模式,這就是字符簇。
比如,要建立一個表示所有元音字符的字符簇,就可以這樣做:
"[AaEeIiOoUu]" :這個模式與任何元音字符匹配,但只能表示一個字符。
用非凡符號"-"可以表示一個字符的范圍,如:
"[a-z]" //匹配字母a-z,即所有的小寫字母
"[A-Z]" //匹配字母A-Z,即所有的大寫字母
"[a-zA-Z]" //匹配所有的字母
"[0-9]" //匹配所有的數字
"[0-9.-]" //匹配所有的數字,以及句號和減號
"[ ]" //匹配所有的白字符
同樣的,這些也只匹配一個字符。
假如要匹配由一個小寫字母和一位數字組成的字符串,比如"a4"、"b5"或"f1",但不是"aa4"、"b5a4" 或"f12"的話,用這個模式:
"^[a-z][0-9]$"
盡管[a-z]代表26個字母的范圍,但在這裡它只能與第一個字符是小寫字母的字符串匹配。
我們已經知道"^"表示字符串的開頭,但是當在一組方括號裡使用"^"時,它表示"非"或"排除"的意思,經常用來剔除某個字符。