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