匹配字符串

通常,需要檢查一個更長的字符串中是否含有一個特定的子字符串。這種部分匹配通常比測試字符串的完全等價更有用處。

在智能表單例子中,希望根據(jù)反饋信息中的一些關(guān)鍵詞將它們發(fā)送到適當?shù)牟块T。例如,如果希望將關(guān)于Bob商店的信件發(fā)到銷售經(jīng)理那里,就需要知道消息中是否出現(xiàn)了單詞shop或它的派生詞。在了解了前面所介紹的函數(shù)后,就可以使用函數(shù)explode()和strtok()在消息中檢索每個單詞,然后通過運算符==或函數(shù)strcmp()對它們進行比較。

然而,還可以調(diào)用一個字符串函數(shù)或正則表達式匹配函數(shù)來完成相同的操作。這些函數(shù)可以用于在一個字符串中搜索一個模式。為了在一個字符串中查找另一個字符串,讀者可以使用函數(shù)strstr()、strchr()、strrchr()和stristr()中的任意一個。

函數(shù)strstr()是最常見的,它可以用于在一個較長的字符串中查找匹配的字符串或字符。注意,在PHP中,函數(shù)strchr()和strstr()完全一樣,雖然其函數(shù)名的意思是在一個字符串中查找一個字符,類似于C語言中的同樣函數(shù)。在PHP中,這兩個函數(shù)都可用于在字符串中查找一個字符串,包括查找只包含一個字符的字符串。strstr()函數(shù)的基本用法如下:string strstr(string haystack, string needle);;在調(diào)用時,必須向函數(shù)傳遞一個要被搜索的子字符串參數(shù)和一個目標關(guān)鍵字字符串參數(shù)。如果找到了目標關(guān)鍵字的一個精確匹配,函數(shù)會從目標關(guān)鍵字前面返回被搜索的字符串,否則返回值為false。如果存在多個目標關(guān)健字,返回的字符串從出現(xiàn)第一個目標關(guān)鍵字的位置開始。

【示例1】在智能表單應用程序中,可以按如下方式?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ā)送給適當?shù)娜恕:瘮?shù)strstr()有兩個變體。第一個變體是stristr(),它幾乎和strstr()一樣,其區(qū)別在于不區(qū)分字符大小寫。對于智能表單應用程序來說,這個函數(shù)非常有用,因為用戶可以輸入delivery、Delivery或DELIVERY,以及其他大小寫混合的情況。第二個變體是strrchr(),它與strstr()一樣,但strrchr()會查找指定字符在字符串中最后一次出現(xiàn)的位置。

函數(shù)strpos()和strrpos()的操作和strstr()類似,但它不是返回一個子字符串,而是返回目標關(guān)鍵字子字符串在被搜索字符串中的位置。更有趣的是,現(xiàn)在的PHP手冊建議使用strpos()函數(shù)替代strstr()函數(shù)來查看一個子字符串在一個字符串中出現(xiàn)的位置,因為前者的運行速度更快。函數(shù)strpos()的基本語法如下:int strpos(string haystack, string needle, int [offset] );返回的整數(shù)代表被搜索字符串中第一次出現(xiàn)目標關(guān)鍵字子字符串的位置。通常,第一個字符是位置。

例如,下面代碼將會在瀏覽器中顯示數(shù)值4。$test = "Hello world";echo strpos($test, "o");

在這個例子中,只是用一個字符作為目標關(guān)鍵字參數(shù),實際上目標關(guān)鍵字參數(shù)可以是任意長度的字符串。

該函數(shù)的可選參數(shù)offset是用來指定被搜索字符串的開始搜索位置。

例如:echo strpos($test, "o", 5);以上代碼會在瀏覽器中顯示數(shù)值7,因為PHP是從位置5開始搜索字符“0”的,所以就看不到位置4上的那個字符。

【示例2】函數(shù)strrpos()與strpos()是一樣的,但返回的是被搜索字符串中最后一次出現(xiàn)目標關(guān)鍵字子字符串的位置。在任何情況下,如果目標關(guān)鍵字不在字符串中,strpos()或strrpos()都將返回false,因此,這就可能帶來新的問題,因為false在一個如PHP這樣的弱類型語言中等于0,也就是說字符串的第一個字符。可以使用運算符===來測試返回值,從而避免這個問題。

$result = strpos($test, "H");if ($result === false)    echo "沒有發(fā)現(xiàn)";else    echo "發(fā)現(xiàn)位置".$result;查找替換功能在字符串中非常有用??梢允褂貌檎姨鎿Q從而通過PHP生成個性化文檔。例如,用人名來替換<name>,用地址來替換<address>。也可以使用這項功能來刪改特定的術(shù)語,例如在一個論壇應用程序中,或是在智能表單應用程序中。需要再次提到的是,可以用字符串函數(shù)或者正則表達式函數(shù)來實現(xiàn)此功能。進行替換操作最常用的字符串函數(shù)是str_re-place()。

該函數(shù)的基本語法如下:string str_replace(string needle, string new_needle, string haystack);這個函數(shù)用new_needle替換所有haystack中的needle。并且返回haystack替換后的結(jié)果??蛇x的第四個參數(shù)是count,它包含了要執(zhí)行的替換操作次數(shù)。讀者可以以數(shù)組的方式傳遞所有參數(shù),該函數(shù)可以很好地完成替換。可以傳遞一個要被替換單詞的數(shù)組,一個替換單詞的數(shù)組,以及應用這些規(guī)則的目標字符串數(shù)組。這個函數(shù)將返回替換后的字符串數(shù)組。

例如,因為人們使用智能表單來投訴,所以可能會用一些具有感情色彩的單詞。作為程序員,通過使用一個包含了帶有感情色彩單詞的數(shù)組$off-color,替換掉一些不文明的用語,如下所示的代碼就是在str_replace()函數(shù)中使用數(shù)組的例子。$feedback = str_replace($offcolor, "%!@*", $feedback);函數(shù)substr_replace()則用來在給定位置中查找和替換字符串中特定的子字符串。基本用法如下:string substr_replace(string string, string replacement, int start, int [length] );這個函數(shù)使用字符串replacement替換字符串string中的一部分。具體是哪一部分則取決于起始位置值和可選參數(shù)length的值。start的值代表要替換字符串位置的開始偏移量。如果它為0或是一個正值,就是一個從字符串開始處計算的偏移量。如果它是一個負值,就是從字符串末尾開始的一個偏移量。

【示例3】如下代碼會用X替換$test中的最后一個字符:$test = substr_replace($test, "X", -1);參數(shù)length是可選的,它代表PHP停止替換操作的位置。如果不給定它的值,它會從字符串start位置開始一直到字符串結(jié)束。如果length為零,替換字符串實際上會插入到字符串中而覆蓋原有的字符串。一個正的length表示要用新字符串替換掉的字符串長度。一個負的length表示從字符串尾部開始到第length個字符停止替換。

網(wǎng)站建設(shè)、網(wǎng)絡(luò)營銷咨詢專線:0871-63535511(點擊可一鍵撥號)