1 基礎知識
正則表達式是一種描述一段文本模式的方法。到目前為止,我們前面所用到過的精確(文字)匹配也是一種正則表達式。例如,前面我們曾搜索過正則表達式的術語,像"shop"和"delivery"。
在PHP中,匹配正則表達式更有點像strstr()匹配,而不像相等比較,因為是在一個字符串的某個位置(如果不指明則可能在字符串中的任何位置)匹配另一個字符串。例如,字符串"shop"匹配正則表達式"shop"。它也可以匹配正則表達式"h"、"ho",等。
除了精確匹配字符外,還可以用特殊字符來指定表達式的元意(meta-meaning)。例如,使用特殊字 符,可以指定一個在字符串開始或末尾肯定存在的模式,該模式的某部分可能被重復,或模式中的字符屬于特定的某一類型。此外,還可以按特殊字符的出現來匹 配。接下來,我們將逐個討論這些變化。
2 字符集和類
使用字符集可以馬上給出比精確匹配功能還要強大的正則表達式。字符集可以用于匹配屬于特定類型的任何字符;事實上它們是一種通配符。
首先,可以用字符作為一個通配符來代替除換行符(n)之外的任一個字符。例如,正則表達式:
.at
可以與"cat"、"sat"和"mat"等進行匹配。通常,這種通配符匹配用于操作系統中的文件名匹配。
但是,使用正則表達式,可以更具體地指明希望匹配的字符類型,而且可以指明字符所屬的一個集合。在前面的例子中,正則表達式匹配"cat"和"mat",但也可以匹配"#at"。如果要限定它是a到z之間的字符,就可以像下面這樣指明:
[a-z]at
任何包含在方括號([])中的內容都是一個字符類——一個被匹配字符所屬的字符集合。請注意,方括號中的表達式只匹配一個字符。
我們可以列出一個集合,例如:
[aeiou]
可以用來表示元音子母。
也可以描述一個范圍,正如前面用連字符那樣,也可以是一個范圍集:
[a-zA-Z]
這個范圍集代表任何的大小寫字母。
此外,還可以用集合來指明字符不屬于某個集。例如:
[^a-z]
可以用來匹配任何不在a和z之間的字符。當把脫字符號(^)包括在方括號里面時,表示否。當該符號用在方括號的外面,則表示另外一個意思,我們稍后將詳細介紹。
3 重復
通常,讀者會希望指明某個字符串或字符類將不止一次地出現。可以在正則表達式中使用兩個特殊字符代替。符號“*”表示這個模式可以被重復0次或