正則表達(dá)式是php中一個非常重要的知識點绽快,通常用來查找和替換字符串芥丧,驗證用戶輸入的信息格式是否符合規(guī)范,如郵件格式坊罢、電話格式等等续担。還有采集器之類的軟件中,正則也是必用不可活孩!主要介紹PHP中幾個常見的正則函數(shù):preg_match()物遇、preg_match_all()、preg_grep()憾儒、preg_split()询兴。
1.preg_match()
該函數(shù)通常用于表單驗證∑鹬海可以按指定的正則表達(dá)式模式诗舰,對字符串進(jìn)行搜索和匹配一次.該函數(shù)有兩個必選參數(shù),第一個參數(shù)需要提供用戶按正則表達(dá)式語法編寫的模式训裆,第二個參數(shù)需要一個字符串眶根。如果提供了第三個可選的數(shù)組參數(shù)matches,則可以擁有保存第一個參數(shù)中的子模式的各個部分的匹配結(jié)果。
2.preg_match_all()
該函數(shù)與preg_match()函數(shù)類似边琉,不同的是函數(shù)preg_match()在第一次匹配之后就會停止搜索汛闸。而函數(shù)preg_match_all()則會一直搜索到指定字符串的結(jié)尾,可以獲取到所有匹配到的結(jié)果艺骂。
該函數(shù)把所有可能的匹配結(jié)果放入第三個參數(shù)的數(shù)組中诸老,并返回整個模式匹配的次數(shù),如果出錯則返回False钳恕。如果使用了第四個參數(shù)别伏,會根據(jù)它指定的順序?qū)⒚看纬霈F(xiàn)的匹配結(jié)果保存到第三個參數(shù)的數(shù)組中。第四個參數(shù)有兩個預(yù)定義的值
a.PREG_PATTERN_ORDER: 它是preg_match_all() 函數(shù)的默認(rèn)值忧额,對結(jié)果排序使$matches[0]為全部模式匹配的數(shù)組厘肮,$matches[1] 為第一個括號中的子模式所匹配的字符串組成的數(shù)組,以此類推睦番。
b.PREG_SET_ORDER: 對結(jié)果排序是$matches[0]為第一組匹配項的數(shù)組类茂,$matches[1]為第二組匹配項的數(shù)組,以此類推托嚣。
3.preg_grep()
該函數(shù)與前兩個函數(shù)不同的是匹配數(shù)組中的元素巩检,返回與正則表達(dá)式匹配的數(shù)組單元。
該函數(shù)返回一個數(shù)組示启,其中包括了第二個參數(shù)數(shù)組中與給定的第一個參數(shù)模式相匹配的單元兢哭,對于輸出數(shù)組的每個元素,進(jìn)行依稀匹配夫嗓。
4.preg_replace()
該函數(shù)可執(zhí)行正則表達(dá)式的搜索和替換迟螺,是一個最強大的字符串替換處理函數(shù)冲秽。
該函數(shù)的三個參數(shù),第一個參數(shù)匹配項矩父,二個參數(shù)被替換的參數(shù)锉桑。第三個被搜多的參數(shù)。 如果指定第四個可選參數(shù)limit 窍株,則僅替換limit個匹配民轴,如果生了limit 或者其值為-1,則所有的匹配項都會被替換夹姥。
5.str_replace()
該函數(shù)是PHP提高的字符串處理函數(shù)杉武,也可以實現(xiàn)字符串的替換工資辙诞。雖然沒有正則表達(dá)式的替換函數(shù)功能強大辙售,但一些簡單字符串的替換要比preg_replace()函數(shù)的執(zhí)行效率高。
該函數(shù)有單個必選參數(shù)飞涂,還有一個可選參數(shù)旦部,第一個參數(shù)是目標(biāo)對象,第二個參數(shù)是替換對象较店,第三個是被處理的字符串士八,該函數(shù)在第三個參數(shù)的字符串中,以區(qū)分大小寫的方式搜索第一個參數(shù)提高的目標(biāo)對象梁呈,并用第二個參數(shù)所提供的替換對象替換找到的所有實例婚度。如果沒有在第三個參數(shù)中搜索到目標(biāo)對象,則被處理的字符串保持不變官卡。第四個是一個可選參數(shù)蝗茁,變量的引用,必須傳入一個變量名稱寻咒,用來保存替換的次數(shù)哮翘。
使用str_replace()的前兩個參數(shù)不僅可以使用字符串,也可以使數(shù)組毛秘。
6.preg_split()
該函數(shù)使用了Perl兼容的正則表達(dá)式語法饭寺,可以按正則表達(dá)式的方法分割字符串。
該函數(shù)返回一個字符串?dāng)?shù)組叫挟,數(shù)組中元素包含通過第二個參數(shù)中的字符串艰匙,經(jīng)第一個參數(shù)的正則表達(dá)式,作為匹配的邊界分割的子串抹恳。如果指定了第三個字符串limit旬薯,則最多返回linmit個子串。而其中最后一個元素包含了被分割后剩余的所有部分适秩。如果limit是-1绊序,則意味著沒有限制硕舆。 第四個參數(shù)是可選參數(shù),
>> PREG_SPLIT_NO_EMPTY:如果設(shè)定了本標(biāo)記骤公,則preg_split()只返回非空的成分
>> PREG_SPLIT_DELIM_CAPTURE: 如果設(shè)定了本標(biāo)記抚官,定界符模式中的括號表達(dá)式也會被捕獲并返回
>> PREG_SPLIT_OFFSET_CAPTURE: 如果設(shè)定了本標(biāo)記,對每個出現(xiàn)的匹配結(jié)果也同時返回其附屬的字符串偏移量阶捆。注意這改變了返回的數(shù)組的值凌节,使其中的每個單元也是一個數(shù)組,其中第一項為匹配字符串洒试,第二項為其在原字符串中的偏移量倍奢。
函數(shù)explode()
如果僅用某個特定的字符串進(jìn)行分割,建議使用explode()函數(shù)垒棋,它不用去調(diào)用正則表達(dá)式引擎卒煞,因此速度是最快的。
該函數(shù)有三個參數(shù)叼架,第一個參數(shù)提高一個分割字符或是字符串畔裕,第二個參數(shù)是被分割的字符串,如果提供第三個可選參數(shù)limit乖订,則指定最多將字符串分割為多少個子串扮饶。該函數(shù)返回一個由被分割的子字符串組成的數(shù)組。
函數(shù) implode()
與分割字符串相對應(yīng)的是implode()函數(shù)乍构,把數(shù)組中所有元素組合為一個字符串甜无。函數(shù)join()為該函數(shù)的別名。
該函數(shù)有兩個參數(shù)哥遮,第一個參數(shù)提高一個鏈接字符或字符串岂丘,第二個參數(shù)指定一個被鏈接的數(shù)組。
標(biāo)簽:PHP編程