通常,需要檢查一個(gè)更長(zhǎng)的字符串中是否含有一個(gè)特定的子字符串。這種部分匹配通常比測(cè)試字符串的完全等價(jià)更有用處。
在智能表單例子中,希望根據(jù)反饋信息中的一些關(guān)鍵詞將它們發(fā)送到適當(dāng)?shù)牟块T(mén)。例如,如果希望將關(guān)于Bob商店的信件發(fā)到銷(xiāo)售經(jīng)理那里,就需要知道消息中是否出現(xiàn)了單詞shop或它的派生詞。在了解了前面所介紹的函數(shù)后,就可以使用函數(shù)explode()和strtok()在消息中檢索每個(gè)單詞,然后通過(guò)運(yùn)算符==或函數(shù)strcmp()對(duì)它們進(jìn)行比較。
然而,還可以調(diào)用一個(gè)字符串函數(shù)或正則表達(dá)式匹配函數(shù)來(lái)完成相同的操作。這些函數(shù)可以用于在一個(gè)字符串中搜索一個(gè)模式。為了在一個(gè)字符串中查找另一個(gè)字符串,讀者可以使用函數(shù)strstr()、strchr()、strrchr()和stristr()中的任意一個(gè)。
函數(shù)strstr()是最常見(jiàn)的,它可以用于在一個(gè)較長(zhǎng)的字符串中查找匹配的字符串或字符。注意,在PHP中,函數(shù)strchr()和strstr()完全一樣,雖然其函數(shù)名的意思是在一個(gè)字符串中查找一個(gè)字符,類(lèi)似于C語(yǔ)言中的同樣函數(shù)。在PHP中,這兩個(gè)函數(shù)都可用于在字符串中查找一個(gè)字符串,包括查找只包含一個(gè)字符的字符串。strstr()函數(shù)的基本用法如下:string strstr(string haystack, string needle);;在調(diào)用時(shí),必須向函數(shù)傳遞一個(gè)要被搜索的子字符串參數(shù)和一個(gè)目標(biāo)關(guān)鍵字字符串參數(shù)。如果找到了目標(biāo)關(guān)鍵字的一個(gè)精確匹配,函數(shù)會(huì)從目標(biāo)關(guān)鍵字前面返回被搜索的字符串,否則返回值為false。如果存在多個(gè)目標(biāo)關(guān)健字,返回的字符串從出現(xiàn)第一個(gè)目標(biāo)關(guān)鍵字的位置開(kāi)始。
【示例1】在智能表單應(yīng)用程序中,可以按如下方式?jīng)Q定將郵件送到哪里:if (strstr($feedback, "shop")) $toaddress = " shop@mysite.com";else if (strstr($feedback, "delivery")) $toaddress = " delivery@mysite.com";else if (strstr($feedback, "bill")) $toaddress = " bill@mysite.com";
首先,這段代碼將檢查反饋信息中特定的關(guān)鍵字,然后將郵件發(fā)送給適當(dāng)?shù)娜?。函?shù)strstr()有兩個(gè)變體。第一個(gè)變體是stristr(),它幾乎和strstr()一樣,其區(qū)別在于不區(qū)分字符大小寫(xiě)。對(duì)于智能表單應(yīng)用程序來(lái)說(shuō),這個(gè)函數(shù)非常有用,因?yàn)橛脩?hù)可以輸入delivery、Delivery或DELIVERY,以及其他大小寫(xiě)混合的情況。第二個(gè)變體是strrchr(),它與strstr()一樣,但strrchr()會(huì)查找指定字符在字符串中最后一次出現(xiàn)的位置。
函數(shù)strpos()和strrpos()的操作和strstr()類(lèi)似,但它不是返回一個(gè)子字符串,而是返回目標(biāo)關(guān)鍵字子字符串在被搜索字符串中的位置。更有趣的是,現(xiàn)在的PHP手冊(cè)建議使用strpos()函數(shù)替代strstr()函數(shù)來(lái)查看一個(gè)子字符串在一個(gè)字符串中出現(xiàn)的位置,因?yàn)榍罢叩倪\(yùn)行速度更快。函數(shù)strpos()的基本語(yǔ)法如下:int strpos(string haystack, string needle, int [offset] );返回的整數(shù)代表被搜索字符串中第一次出現(xiàn)目標(biāo)關(guān)鍵字子字符串的位置。通常,第一個(gè)字符是位置。
例如,下面代碼將會(huì)在瀏覽器中顯示數(shù)值4。$test = "Hello world";echo strpos($test, "o");
在這個(gè)例子中,只是用一個(gè)字符作為目標(biāo)關(guān)鍵字參數(shù),實(shí)際上目標(biāo)關(guān)鍵字參數(shù)可以是任意長(zhǎng)度的字符串。
該函數(shù)的可選參數(shù)offset是用來(lái)指定被搜索字符串的開(kāi)始搜索位置。
例如:echo strpos($test, "o", 5);以上代碼會(huì)在瀏覽器中顯示數(shù)值7,因?yàn)镻HP是從位置5開(kāi)始搜索字符“0”的,所以就看不到位置4上的那個(gè)字符。
【示例2】函數(shù)strrpos()與strpos()是一樣的,但返回的是被搜索字符串中最后一次出現(xiàn)目標(biāo)關(guān)鍵字子字符串的位置。在任何情況下,如果目標(biāo)關(guān)鍵字不在字符串中,strpos()或strrpos()都將返回false,因此,這就可能帶來(lái)新的問(wèn)題,因?yàn)閒alse在一個(gè)如PHP這樣的弱類(lèi)型語(yǔ)言中等于0,也就是說(shuō)字符串的第一個(gè)字符??梢允褂眠\(yùn)算符===來(lái)測(cè)試返回值,從而避免這個(gè)問(wèn)題。
$result = strpos($test, "H");if ($result === false) echo "沒(méi)有發(fā)現(xiàn)";else echo "發(fā)現(xiàn)位置".$result;查找替換功能在字符串中非常有用??梢允褂貌檎姨鎿Q從而通過(guò)PHP生成個(gè)性化文檔。例如,用人名來(lái)替換<name>,用地址來(lái)替換<address>。也可以使用這項(xiàng)功能來(lái)刪改特定的術(shù)語(yǔ),例如在一個(gè)論壇應(yīng)用程序中,或是在智能表單應(yīng)用程序中。需要再次提到的是,可以用字符串函數(shù)或者正則表達(dá)式函數(shù)來(lái)實(shí)現(xiàn)此功能。進(jìn)行替換操作最常用的字符串函數(shù)是str_re-place()。
該函數(shù)的基本語(yǔ)法如下:string str_replace(string needle, string new_needle, string haystack);這個(gè)函數(shù)用new_needle替換所有haystack中的needle。并且返回haystack替換后的結(jié)果??蛇x的第四個(gè)參數(shù)是count,它包含了要執(zhí)行的替換操作次數(shù)。讀者可以以數(shù)組的方式傳遞所有參數(shù),該函數(shù)可以很好地完成替換??梢詡鬟f一個(gè)要被替換單詞的數(shù)組,一個(gè)替換單詞的數(shù)組,以及應(yīng)用這些規(guī)則的目標(biāo)字符串?dāng)?shù)組。這個(gè)函數(shù)將返回替換后的字符串?dāng)?shù)組。
例如,因?yàn)槿藗兪褂弥悄鼙韱蝸?lái)投訴,所以可能會(huì)用一些具有感情色彩的單詞。作為程序員,通過(guò)使用一個(gè)包含了帶有感情色彩單詞的數(shù)組$off-color,替換掉一些不文明的用語(yǔ),如下所示的代碼就是在str_replace()函數(shù)中使用數(shù)組的例子。$feedback = str_replace($offcolor, "%!@*", $feedback);函數(shù)substr_replace()則用來(lái)在給定位置中查找和替換字符串中特定的子字符串?;居梅ㄈ缦拢簊tring substr_replace(string string, string replacement, int start, int [length] );這個(gè)函數(shù)使用字符串replacement替換字符串string中的一部分。具體是哪一部分則取決于起始位置值和可選參數(shù)length的值。start的值代表要替換字符串位置的開(kāi)始偏移量。如果它為0或是一個(gè)正值,就是一個(gè)從字符串開(kāi)始處計(jì)算的偏移量。如果它是一個(gè)負(fù)值,就是從字符串末尾開(kāi)始的一個(gè)偏移量。
【示例3】如下代碼會(huì)用X替換$test中的最后一個(gè)字符:$test = substr_replace($test, "X", -1);參數(shù)length是可選的,它代表PHP停止替換操作的位置。如果不給定它的值,它會(huì)從字符串start位置開(kāi)始一直到字符串結(jié)束。如果length為零,替換字符串實(shí)際上會(huì)插入到字符串中而覆蓋原有的字符串。一個(gè)正的length表示要用新字符串替換掉的字符串長(zhǎng)度。一個(gè)負(fù)的length表示從字符串尾部開(kāi)始到第length個(gè)字符停止替換。
當(dāng)前文章標(biāo)題:匹配字符串
當(dāng)前URL:http://51zuanshi.com.cn/news/wzzz/3283.html
上一篇:比較字符串