版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、 2 第4章 PHP字符串操作與正則表達(dá)式 字符串是字符串是PHP程序相當(dāng)重要的一部分操作程序相當(dāng)重要的一部分操作 內(nèi)容,程序傳遞給我們的可視化信息,絕內(nèi)容,程序傳遞給我們的可視化信息,絕 大多數(shù)都是靠字符串來實現(xiàn)的。大多數(shù)都是靠字符串來實現(xiàn)的。 例如本書開始時的例如本書開始時的Hello World程序就是輸程序就是輸 出了一個出了一個“Hello World!”的字符串。的字符串。 本章將詳細(xì)解釋本章將詳細(xì)解釋PHP中的字符串以及字符中的字符串以及字符 串的連接、分割、比較、查找和替換等操串的連接、分割、比較、查找和替換等操 作。作。 3 4.1 字符串的定義 美國國家標(biāo)準(zhǔn)學(xué)會美國國家標(biāo)準(zhǔn)
2、學(xué)會(American National Standard Institute, ANSI)制定了一整套可見的字符制定了一整套可見的字符(如大寫字母如大寫字母A)和不可見的字符和不可見的字符 (如回車符、退格符等控制字符如回車符、退格符等控制字符),共,共127個字符。個字符。 由零個或者多個字符組成的有限序列,也就是由零個或者多個字符組成的有限序列,也就是n(n0)個字符的個字符的 集合,叫做字符串。集合,叫做字符串。 在書寫上,字符串一般都寫在成對的單引號或者雙引號中。例在書寫上,字符串一般都寫在成對的單引號或者雙引號中。例 如:如: 4 4.2 字符串的格式化 在程序運行的過程中,字在程
3、序運行的過程中,字 符串往往并不是以我們所符串往往并不是以我們所 需要的形式出現(xiàn)的,此時,需要的形式出現(xiàn)的,此時, 就需要對該字符串進(jìn)行格就需要對該字符串進(jìn)行格 式化處理,如刪除字符串式化處理,如刪除字符串 中多余的空格。中多余的空格。 5 1. chop() 函數(shù)語法:string chop(string $str, string $charlist) 函數(shù)作用:去除字符串尾部的空格等特殊字符,如果指定 了第2個參數(shù),則去除字符串尾部中的由第2個參數(shù)指定的 字符。 函數(shù)例程: 6 2. ltrim() 函數(shù)語法:string ltrim (string $str, string $charl
4、ist) 函數(shù)作用:去除字符串頭部的空格等特殊字符,如果指定 了第2個參數(shù),則去除字符串頭部中的由第2個參數(shù)指定的 字符。 函數(shù)例程: 7 3. trim() 函數(shù)語法:string trim(string $str, string $charlist) 函數(shù)作用:去除字符串頭部和尾部的空格等特殊字 符,如果指定了第2個參數(shù),則去除字符串頭部和 尾部中的由第2個參數(shù)指定的字符。 函數(shù)例程: 8 1. addslashes() 函數(shù)語法:string addslashes(string str) 函數(shù)作用:使用反斜線引用字符串。 函數(shù)例程: 9 2. stripslashes() stripsl
5、ashes()函數(shù)與addslashes()相反,是 把被addslashes()函數(shù)加上的轉(zhuǎn)義符取消。 函數(shù)語法:string stripslashes(string) 函數(shù)例程: 10 1. strtoupper() 函數(shù)語法:string strtoupper(string $string) 函數(shù)說明:將字符串string的字母全部以大 寫字母的形式返回。 函數(shù)例程: 11 2. strtolower() 函數(shù)語法:string strtolower(string $string) 函數(shù)說明:將字符串string的字母全部以小 寫字母的形式返回。 函數(shù)例程: 12 4.3 字符串的連接和
6、分割 在在PHP程序設(shè)計過程中,經(jīng)常需要定義各種各程序設(shè)計過程中,經(jīng)常需要定義各種各 樣的字符串以供使用,就會碰到多個字符串合樣的字符串以供使用,就會碰到多個字符串合 并或者將一個大字符串分割成為幾個子字符串并或者將一個大字符串分割成為幾個子字符串 的應(yīng)用需求。的應(yīng)用需求。 我們已經(jīng)知道可以用我們已經(jīng)知道可以用“.”運算符來連接多個字運算符來連接多個字 符串成為一個新的字符串。符串成為一個新的字符串。 本節(jié)要反其道而行之,將學(xué)習(xí)如何把一個字符本節(jié)要反其道而行之,將學(xué)習(xí)如何把一個字符 串分割成多個子字符串。串分割成多個子字符串。 13 1. explode() 函數(shù)語法: array explo
7、de(string $separator, string $string, int $limit) 函數(shù)作用: 將字符串$string用$separator來分割,每出現(xiàn)一次 $separator,就多出一個由兩個$separator之間的字符 組成的字符串元素,函數(shù)最后的返回值是一個數(shù)組。如 果使用了第3個參數(shù)$limit,則函數(shù)返回的數(shù)組最多包含 $limit個元素,剩余未被分割的字符串作為最后一個元素。 函數(shù)實際使用時,最常見的$separator是空格或者“|”、 “,”。 函數(shù)例程: 參見教材P71 14 2. implode()和join() 函數(shù)語法:string implode
8、(string $glue, array $pieces) 函數(shù)作用:把數(shù)組的各元素合成為一個用$glue連接起來的 字符串。 函數(shù)例程: 15 函數(shù)語法:函數(shù)語法: string strtok(string $str, string $token) 函數(shù)作用:函數(shù)作用: 字符串$str用字符串$token的值切開成小段小段的字符串,返回$token 第一次出現(xiàn)前的部分子字符串,如果重復(fù)執(zhí)行該函數(shù),則不再需要$str 參數(shù),將依次返回后續(xù)的下一個$token出現(xiàn)前的部分子字符串。 函數(shù)例程:函數(shù)例程: ?php $string = I like this game; $tok = strtok
9、($string, ); while($tok) echo 單詞=$tok; $tok = strtok( ); /只有第一次調(diào)用strtok()函數(shù)時需要使用$string參數(shù) /* 輸出:單詞=I單詞=like單詞=this單詞=game */ ? 16 函數(shù)語法:函數(shù)語法: string substr(string $string, int $start, int $length) 函數(shù)作用:函數(shù)作用: 取得字符串$string從$start開始的$length長度的子字符串,如果沒有$length參 數(shù),則取到$string的最后一個字符。 函數(shù)例程:函數(shù)例程: 17 4.4 字符串的
10、比較 在現(xiàn)實生活中,我們經(jīng)常按照姓氏筆劃的多少在現(xiàn)實生活中,我們經(jīng)常按照姓氏筆劃的多少 或者拼音順序來給多人排序,或者拼音順序來給多人排序,26個英文字母和個英文字母和 10個阿拉伯?dāng)?shù)字也能按照從小到大或者從大到個阿拉伯?dāng)?shù)字也能按照從小到大或者從大到 小的規(guī)則進(jìn)行排序,在程序設(shè)計中,由字母和小的規(guī)則進(jìn)行排序,在程序設(shè)計中,由字母和 數(shù)字組成的字符串,同樣可以按照指定的規(guī)則數(shù)字組成的字符串,同樣可以按照指定的規(guī)則 來排列順序。來排列順序。 PHP提供了提供了strcmp()、strcasecmp()和和 strnatcmp()幾個函數(shù)來對字符串進(jìn)行排序比較。幾個函數(shù)來對字符串進(jìn)行排序比較。 18
11、 1. strcmp() 函數(shù)語法: int strcmp(string $str1, string $str2) 函數(shù)說明: 本函數(shù)用來比較兩個字符串的大小。返回負(fù)數(shù)表示str1小于 str2;返回正數(shù)表示str1大于str2;返回零表示兩個字符串相 同。 函數(shù)例程: 19 2. strcasecmp() 函數(shù)語法: int strcasecmp(string $str1, string $str2, int $len) 函數(shù)說明: strcasecmp()用來比較參數(shù)str1和str2字符串,比較 時會自動忽略大小寫的差異。第3個參數(shù)len表示要 比較的長度。 函數(shù)例程: 20 3. st
12、rnatcmp() 函數(shù)語法: int strnatcmp(string $str1, string $str2) 函數(shù)說明: 按照自然規(guī)則比較兩個字符串的大小。返回負(fù)數(shù)表 示str1小于str2;返回正數(shù)表示str1大于str2;返回 零表示兩個字符串相同。 函數(shù)例程: 21 字符串是由一個或多個字符組成的,那么如何得知某字符串是由一個或多個字符組成的,那么如何得知某 個特定的字符串是由多少個字符來組成的呢?個特定的字符串是由多少個字符來組成的呢?PHP提提 供了供了strlen()函數(shù)來獲得字符串的長度。函數(shù)來獲得字符串的長度。 函數(shù)語法:函數(shù)語法: int strlen(string $
13、string) 函數(shù)說明:函數(shù)說明: 返回字符串string的長度。 函數(shù)例程:函數(shù)例程: 22 4.5 字符串的查找和替換 字符串的連接、分割以及字符串的連接、分割以及 對字符串的查找和替換,對字符串的查找和替換, 是字符串應(yīng)用最多的操作。是字符串應(yīng)用最多的操作。 本節(jié)學(xué)習(xí)字符串的查找和本節(jié)學(xué)習(xí)字符串的查找和 替換。替換。 23 1. strstr() 函數(shù)語法: string strstr(string $haystack, string $needle, bool $before_needle) 函數(shù)說明: 在字符串haystack中查找子字符串needle第一次出現(xiàn)的位置, 并返回字符
14、串haystack中從字符串needle開始到母字符串結(jié) 束的部分。如果參數(shù)before_needle為true,則返回字符串 haystack中從開始到字符串needle第一次出現(xiàn)位置之間的字 符串。 函數(shù)例程: 24 2. stristr() 函數(shù)語法: string stristr(string $haystack, string $needle, bool $before_needle) 函數(shù)說明: 同strstr(),不同之處為本函數(shù)不區(qū)分大小寫。 函數(shù)例程: 25 3. strrchr() 函數(shù)語法: string strrchr(string $haystack, string
15、$needle) 函數(shù)說明: 本函數(shù)用來尋找字符串haystack中的字符needle最 后一次出現(xiàn)的位置,并返回此位置起至字符串 haystack結(jié)束之間的字符串。若沒有找到needle則 返回false。 函數(shù)例程: 26 1. strpos() 函數(shù)語法: int strpos(string $haystack, mixed $needle, int $offset) 函數(shù)說明: 尋找字符串haystack中的字符needle最先出現(xiàn)的位置。 值得注意的是needle只能是一個字符,中文字等就不 適合了。若找不到指定的字符,則返回false值。參數(shù) offset可省略,用來表示從offs
16、et位置處開始找。 函數(shù)例程: 27 2. strrpos() 函數(shù)語法: int strrpos(string $haystack, string $needle, int $offset) 函數(shù)說明: 與strpos()略同,不同之處是查找并返回needle最后 一次出現(xiàn)的位置。 函數(shù)例程: 28 3. 其他 函數(shù)語法: int stripos(string $haystack, string $needle, int $offset) 函數(shù)說明: 同strpos(),忽略大小寫。 函數(shù)語法: int strripos(string $haystack, string $needle, i
17、nt $offset) 函數(shù)說明: 同strrpos(),忽略大小寫。 29 1. str_replace() 函數(shù)語法: mixed str_replace(mixed $search, mixed $replace, mixed $subject, int $text_one = str_replace(a href, a target=_blank href, $html_text); echo $text_one; /輸出_首頁_ $text_two = str_replace(_, , $text_one); echo $text_two; /輸出首頁 ? 30 2. substr_
18、replace() 函數(shù)語法: mixed substr_replace(mixed $string, string $replacement, int $start, int $length) 函數(shù)說明: 在原字符串string從start開始的位置開始替換為replacement。 開始替換的位置應(yīng)該小于原字符串的長度,可選參數(shù)length 為要替換的長度。 函數(shù)例程: 31 4.6 字符串的加密和編碼 為了保護(hù)敏感的內(nèi)容,我為了保護(hù)敏感的內(nèi)容,我 們通常將其加密存儲,們通常將其加密存儲, PHP提供了多個加密函數(shù),提供了多個加密函數(shù), 最常用的是最常用的是MD5散列加密。散列加密。 32
19、 函數(shù)語法:函數(shù)語法: string md5(string $str, bool $raw_output) 函數(shù)說明:函數(shù)說明: 返回字符串str的MD5散列值。 函數(shù)例程:函數(shù)例程: 33 1. urlencode() 函數(shù)語法: string urlencode(string $str) 函數(shù)說明: 將字符串str按照URL方式編碼,除了“-”、“_”和 “.”之外的所有非字母數(shù)字字符都將被替換成百分 號(%)后跟兩位十六進(jìn)制數(shù),空格則編碼為加號(+)。 函數(shù)例程: 34 2. urldecode() 函數(shù)語法: string urldecode(string $str) 函數(shù)說明: 解碼
20、給出的已編碼字符串中的任何%#。返回解碼 后的字符串。 函數(shù)例程: 35 3. base64_encode() 函數(shù)語法: string base64_encode(string $data) 函數(shù)說明: 返回使用base64對data進(jìn)行的編碼。設(shè)計此種編碼 是為了使二進(jìn)制數(shù)據(jù)可以通過非純8-bit的傳輸層傳 輸,例如電子郵件的主體。Base64-encoded數(shù)據(jù) 要比原始數(shù)據(jù)多占用33%左右的空間。 函數(shù)例程: 36 4. base64_decode() 函數(shù)語法: string base64_decode(string $encoded_data) 函數(shù)說明: 針對encoded_da
21、ta進(jìn)行解碼,返回原始數(shù)據(jù),失敗 則返回false。 函數(shù)例程: 37 4.7 正則表達(dá)式簡介 正則表達(dá)式是一種可以用于模式匹配和替換的強(qiáng)有力正則表達(dá)式是一種可以用于模式匹配和替換的強(qiáng)有力 的工具。的工具。 正則表達(dá)式可以讓用戶通過使用一系列的特殊字符構(gòu)正則表達(dá)式可以讓用戶通過使用一系列的特殊字符構(gòu) 建匹配模式,然后把匹配模式與數(shù)據(jù)文件、程序輸入建匹配模式,然后把匹配模式與數(shù)據(jù)文件、程序輸入 以及以及Web頁面的表單輸入等目標(biāo)對象進(jìn)行比較,根據(jù)頁面的表單輸入等目標(biāo)對象進(jìn)行比較,根據(jù) 比較對象中是否包含匹配模式,執(zhí)行相應(yīng)的程序。比較對象中是否包含匹配模式,執(zhí)行相應(yīng)的程序。 正則表達(dá)式的使用,可以
22、通過簡單的辦法來實現(xiàn)強(qiáng)大正則表達(dá)式的使用,可以通過簡單的辦法來實現(xiàn)強(qiáng)大 的功能。的功能。 通俗地講,正則表達(dá)式通俗地講,正則表達(dá)式(Regular Expression)就是用就是用 一個一個“字符串字符串”來描述一個特征,然后去驗證另一個來描述一個特征,然后去驗證另一個 “字符串字符串”是否符合這個特征。是否符合這個特征。 38 4.7 正則表達(dá)式簡介 正則表達(dá)式的用途非常廣泛,如:正則表達(dá)式的用途非常廣泛,如: 驗證字符串是否符合指定特征 用來查找字符串 用來替換,比普通的替換更強(qiáng)大。 正則表達(dá)式是由普通字符正則表達(dá)式是由普通字符(例如字符例如字符a到到z)以及以及 特殊字符特殊字符(稱為
23、元字符稱為元字符)組成的文字模式。正則組成的文字模式。正則 表達(dá)式作為一個模板,將某個字符模式與所搜表達(dá)式作為一個模板,將某個字符模式與所搜 索的字符串進(jìn)行匹配。索的字符串進(jìn)行匹配。 正則表達(dá)式的組件可以是單個的字符、字符集正則表達(dá)式的組件可以是單個的字符、字符集 合、字符范圍、字符間的選擇或者所有這些組合、字符范圍、字符間的選擇或者所有這些組 件的任意組合。件的任意組合。 39 普通字符由所有那些未顯式指定為元字符的打普通字符由所有那些未顯式指定為元字符的打 印和非打印字符組成。這包括所有的大寫和小印和非打印字符組成。這包括所有的大寫和小 寫字母、所有數(shù)字、所有標(biāo)點符號以及其他一寫字母、所有
24、數(shù)字、所有標(biāo)點符號以及其他一 些符號。些符號。 表達(dá)式中的普通字符,在匹配一個字符串的時表達(dá)式中的普通字符,在匹配一個字符串的時 候,匹配與之相同的一個字符。候,匹配與之相同的一個字符。 如表達(dá)式 “c”,在匹配字符串 “abcde” 時成功; 匹配到的內(nèi)容是“c”;匹配到的位置開始于2,結(jié) 束于3。再如,表達(dá)式 “bcd”,在匹配字符串 “abcde” 時成功;匹配到的內(nèi)容是 “bcd”;匹配 到的位置開始于1,結(jié)束于4。 40 非打印字符如表非打印字符如表4-1所示。所示。 字 符含 義 cx匹配由x指明的控制字符。例如, cM匹配一個Control-M或回車符。x 的值必須為AZ或az之
25、一。否則,將c視為一個原義的 c 字符 f匹配一個換頁符。等價于 x0c 和 cL n匹配一個換行符。等價于 x0a 和 cJ r匹配一個回車符。等價于 x0d 和 cM s匹配任何空白字符,包括空格、制表符、換頁符等。等價于 fnrtv S匹配任何非空白字符。等價于 fnrtv t匹配一個制表符。等價于 x09 和 cI v匹配一個垂直制表符。等價于 x0b 和 cK 41 所謂特殊字符,就是一些有特殊含義的字符,如通常用所謂特殊字符,就是一些有特殊含義的字符,如通常用“*”表表 示任何字符串。正則表達(dá)式的特殊字符如表示任何字符串。正則表達(dá)式的特殊字符如表4-2所示。所示。 特殊字符說 明
26、$匹配輸入字符串的結(jié)尾位置。如果設(shè)置了 RegExp 對象的 Multiline 屬性,則 $ 也匹配 n 或 r。要匹配 $ 字符本身,應(yīng)使用 $ ( )標(biāo)記一個子表達(dá)式的開始和結(jié)束位置。子表達(dá)式可以獲取供以后使用。要匹配這些字符,應(yīng)使 用 ( 和 ) *匹配前面的子表達(dá)式零次或多次。要匹配 * 字符,應(yīng)使用 * +匹配前面的子表達(dá)式一次或多次。要匹配 + 字符,應(yīng)使用 + .匹配除換行符 n之外的任何單字符。要匹配 .,應(yīng)使用 . 標(biāo)記一個中括號表達(dá)式的開始。要匹配 ,應(yīng)使用 ?匹配前面的子表達(dá)式零次或一次,或指明一個非貪婪限定符。要匹配 ? 字符,應(yīng)使用 ? 將下一個字符標(biāo)記為或特殊字符
27、、或原義字符、或向后引用、或八進(jìn)制轉(zhuǎn)義符。例如, n 匹 配字符 n。n 匹配換行符。序列 匹配 “”,而 ( 則匹配 “(” 匹配輸入字符串的開始位置,除非在方括號表達(dá)式中使用,此時它表示不接受該字符集合。要 匹配 字符本身,應(yīng)使用 標(biāo)記限定符表達(dá)式的開始。要匹配 ,應(yīng)使用 |指明兩項之間的一個選擇。要匹配 |,應(yīng)使用 | 42 限定符用來指定正則表達(dá)式的一個給定組件必須要出現(xiàn)多少次才能限定符用來指定正則表達(dá)式的一個給定組件必須要出現(xiàn)多少次才能 滿足匹配條件。有滿足匹配條件。有*、+、?、n、n,、n,m,共,共6種。種。 正則表達(dá)式的限定符如表正則表達(dá)式的限定符如表4-3所示。所示。 限
28、定 符 含 義 * 匹配前面的子表達(dá)式零次或多次。例如,zo* 能匹配 “z” 以及 “zoo”。* 等價于0, + 匹配前面的子表達(dá)式一次或多次。例如,zo+ 能匹配 “zo” 以及 “zoo”,但不能 匹配 “z”。+ 等價于1, ? 匹配前面的子表達(dá)式零次或一次。例如,“do(es)?”可以匹配 “do” 或 “does” 中的 “do” 。? 等價于0,1 n n是一個非負(fù)整數(shù)。匹配確定的 n 次。例如,o2 不能匹配 “Bob” 中的 o, 但是能匹配 “food” 中的兩個 o n, n是一個非負(fù)整數(shù)。至少匹配n 次。例如,o2, 不能匹配 “Bob” 中的 o,但 能匹配 “fo
29、ooood” 中的所有 o。o1, 等價于 o+。o0, 則等價于 o* n,m m 和 n 均為非負(fù)整數(shù),其中n m。最少匹配 n 次且最多匹配 m 次。例如, “o1,3” 將匹配 “fooooood” 中的前三個 o。o0,1 等價于 o?。注意逗 號與兩個數(shù)之間不能有空格 43 定位符用來描述字符串或單詞的邊界,共有定位符用來描述字符串或單詞的邊界,共有4個,如個,如 表表4-4所示。所示。 定 位 符含 義 指字符串的開始 $指字符串的結(jié)束 b指單詞的前或后邊界 B指非單詞邊界 44 用圓括號將所有選擇項括起來,相鄰的選擇項用圓括號將所有選擇項括起來,相鄰的選擇項 之間用之間用“|”
30、分隔。但用圓括號會有一個副作用,分隔。但用圓括號會有一個副作用, 是相關(guān)的匹配會被緩存,此時可用是相關(guān)的匹配會被緩存,此時可用?:放在第一放在第一 個選項前來消除這種副作用。個選項前來消除這種副作用。 其中其中?:是非捕獲元之一,還有兩個非捕獲元是非捕獲元之一,還有兩個非捕獲元 是是?=和和?!,這兩個還有更多的含義,前者為正,這兩個還有更多的含義,前者為正 向預(yù)查,在任何開始匹配圓括號內(nèi)的正則表達(dá)向預(yù)查,在任何開始匹配圓括號內(nèi)的正則表達(dá) 式模式的位置來匹配搜索字符串,后者為負(fù)向式模式的位置來匹配搜索字符串,后者為負(fù)向 預(yù)查,在任何開始不匹配該正則表達(dá)式模式的預(yù)查,在任何開始不匹配該正則表達(dá)式
31、模式的 位置來匹配搜索字符串。位置來匹配搜索字符串。 45 對一個正則表達(dá)式模式或部分模式兩邊添加圓對一個正則表達(dá)式模式或部分模式兩邊添加圓 括號將導(dǎo)致相關(guān)匹配存儲到一個臨時緩沖區(qū)中,括號將導(dǎo)致相關(guān)匹配存儲到一個臨時緩沖區(qū)中, 所捕獲的每個子匹配都按照在正則表達(dá)式模式所捕獲的每個子匹配都按照在正則表達(dá)式模式 中從左至右所遇到的內(nèi)容存儲。中從左至右所遇到的內(nèi)容存儲。 存儲子匹配的緩沖區(qū)編號從存儲子匹配的緩沖區(qū)編號從1開始,連續(xù)編號直開始,連續(xù)編號直 至最大至最大99個子表達(dá)式。每個緩沖區(qū)都可以使用個子表達(dá)式。每個緩沖區(qū)都可以使用 n訪問,其中訪問,其中n為一個標(biāo)識特定緩沖區(qū)的一為一個標(biāo)識特定緩沖
32、區(qū)的一 位或兩位十進(jìn)制數(shù)。位或兩位十進(jìn)制數(shù)。 可以使用非捕獲元字符可以使用非捕獲元字符 ?:、?= 或或 ?! 來忽略對相關(guān)匹配的保存。來忽略對相關(guān)匹配的保存。 46 (1) 表達(dá)式表達(dá)式“(|”)(.*?)(1)”在匹配在匹配“ Hello, “World” ”時成功,匹配到的內(nèi)容是時成功,匹配到的內(nèi)容是“ Hello ”。再。再 次匹配時可以匹配到次匹配時可以匹配到“ “World” ”(注意程序中引號注意程序中引號 均無方向均無方向)。 (2) 表達(dá)式表達(dá)式“(w)14,” 在匹配在匹配 “aa bbbb abcdefg ccccc 111121111 999999999” 時成功;匹配
33、到的內(nèi)時成功;匹配到的內(nèi) 容是容是 “ccccc”。再次匹配時,將得到。再次匹配時,將得到 999999999。 這個表達(dá)式要求這個表達(dá)式要求 “w” 范圍的字符至少重復(fù)范圍的字符至少重復(fù)5次,注次,注 意與意與 “w5,” 之間的區(qū)別。之間的區(qū)別。 (3) 表達(dá)式表達(dá)式 “.*?” 在匹配在匹配 “” 時成時成 功。如果功。如果 “” 與與 “” 不配對,則會匹配失不配對,則會匹配失 ??;如果改成其他配對,也可以匹配成功。??;如果改成其他配對,也可以匹配成功。 47 (4) “The”:表示所有以:表示所有以“The”開始的字符串開始的字符串(“There”和和 “The cat”等等)。
34、(5) “of despair$”:表示所有以:表示所有以“of despair”結(jié)尾的字符串。結(jié)尾的字符串。 (6) “abc$”:表示開始和結(jié)尾都是:表示開始和結(jié)尾都是“abc”的字符串。的字符串。 (7) “notice”:表示任何包含:表示任何包含“notice”的字符串。的字符串。 (8) *、+和和?這三個符號,表示一個或一序列字符重復(fù)這三個符號,表示一個或一序列字符重復(fù) 出現(xiàn)的次數(shù)。它們分別表示出現(xiàn)的次數(shù)。它們分別表示“沒有或更多沒有或更多”、“一次或更多一次或更多” 及及“沒有或一次沒有或一次”。 (9) 用大括號表示重復(fù)次數(shù)的范圍。用大括號表示重復(fù)次數(shù)的范圍。 (10)|表示
35、表示“或或”操作。操作。 (11).可以替代任何字符。可以替代任何字符。 (12)方括號表示某些字符允許在一個字符串中的某一特定位置方括號表示某些字符允許在一個字符串中的某一特定位置 出現(xiàn)。出現(xiàn)。 48 (1)非負(fù)整數(shù):非負(fù)整數(shù):d+$ (2)正整數(shù):正整數(shù):0-9*1-90-9*$ (3)非正整數(shù):非正整數(shù):(-d+)|(0+)$ (4)負(fù)整數(shù):負(fù)整數(shù):-0-9*1-90-9*$ (5)整數(shù):整數(shù):-?d+$ (6)非負(fù)浮點數(shù):非負(fù)浮點數(shù):d+(.d+)?$ (7)正浮點數(shù):正浮點數(shù):(0-9)+.0-9*1-90-9*)|(0-9*1-90-9*.0-9+)|(0- 9*1-90-9*)$
36、 (8)非正浮點數(shù):非正浮點數(shù):(-d+.d+)?)|(0+(.0+)?)$ (9)負(fù)浮點數(shù):負(fù)浮點數(shù):(-(正浮點數(shù)正則式正浮點數(shù)正則式)$ (10) 英文字符串:英文字符串:A-Za-z+$ (11) 英文大寫串:英文大寫串:A-Z+$ (12) 英文小寫串:英文小寫串:a-z+” (13) 英文字符數(shù)字串:英文字符數(shù)字串:A-Za-z0-9+$ (14) 英數(shù)字加下劃線串:英數(shù)字加下劃線串:w+$ (15) E-mail地址:地址:w-+(.w-+)*w-+(.w-+)+$ (16) URL:a-zA-Z+:/(w+(-w+)*)(.(w+(-w+)*)*(?s*)?$ 49 (1) 如
37、果要求表達(dá)式所匹配的內(nèi)容是整個字符串,而不是從字如果要求表達(dá)式所匹配的內(nèi)容是整個字符串,而不是從字 符串中找一部分,那么可以在表達(dá)式的首尾使用符串中找一部分,那么可以在表達(dá)式的首尾使用“”和和“$”, 例如例如“d+$”要求整個字符串只有數(shù)字。要求整個字符串只有數(shù)字。 (2) 如果要求匹配的內(nèi)容是一個完整的單詞,而不會是單詞的如果要求匹配的內(nèi)容是一個完整的單詞,而不會是單詞的 一部分,那么在表達(dá)式首尾使用一部分,那么在表達(dá)式首尾使用“b”,例如使用,例如使用 “b(if|while|else|void|int.)b”來匹配程序中的關(guān)鍵字。來匹配程序中的關(guān)鍵字。 (3) 表達(dá)式不要匹配空字符串。
38、表達(dá)式不要匹配空字符串。 (4) 能匹配空字符串的子匹配不要循環(huán)無限次。能匹配空字符串的子匹配不要循環(huán)無限次。 (5) 合理選擇貪婪模式與非貪婪模式。合理選擇貪婪模式與非貪婪模式。 (6) 或或 “|” 的左右兩邊,對某個字符最好只有一邊可以匹配,的左右兩邊,對某個字符最好只有一邊可以匹配, 這樣,不會因為這樣,不會因為 “|” 兩邊的表達(dá)式因為交換位置而有所不同。兩邊的表達(dá)式因為交換位置而有所不同。 (7) 注意:在方括號中不需要轉(zhuǎn)義字符。注意:在方括號中不需要轉(zhuǎn)義字符。 50 4.8 PHP的正則表達(dá)式操作 本節(jié)將介紹本節(jié)將介紹PHP5中與正則中與正則 表達(dá)式相關(guān)的函數(shù)。表達(dá)式相關(guān)的函數(shù)。
39、 51 函數(shù)語法:函數(shù)語法: array preg_grep(string $pattern, array $input, int $flags) 函數(shù)說明:函數(shù)說明: 返回一個包括了input數(shù)組中與給定的pattern模式相匹配單元的新數(shù)組。 如果參數(shù)flags為PREG_GREP_INVERT,則返回的是由不匹配pattern 單元所組成的新數(shù)組。 函數(shù)例程:函數(shù)例程: ASP, 選擇二=PHP, 選擇三=JSP, 選擇四=JAVA, 選擇五=C#); $newarr = preg_grep(/P+/, $arr); print_r($newarr); /將輸出:Array ( 選擇一
40、= ASP 選擇二 = PHP 選擇三 = JSP ) $newarr = preg_grep(/P+/, $arr, PREG_GREP_INVERT); print_r($newarr); /將輸出:Array(選擇四 = JAVA 選擇五 = C#) ? 52 函數(shù)語法:函數(shù)語法: int preg_match_all(string $pattern, string $subject, array $matches, int $flags) 函數(shù)說明:函數(shù)說明: 在subject中搜索所有與pattern給出的正則表達(dá)式匹配的內(nèi)容,并將結(jié)果以 flags指定的順序放到數(shù)組matches中。搜索到第一個匹配項之后,接下來 的搜索從上一個匹配項末尾開始。 函數(shù)例程:函數(shù)例程: 新浪新聞 1 = 搜狐新聞 2 = 網(wǎng)易新聞 3 = 騰訊新聞)*/ ? 53 函數(shù)語法:函數(shù)語法: int preg_match(string $pattern, string $subject, array $matches , int $flags) 函數(shù)說明:函數(shù)說明: 在subject字符串中搜索與pattern給出的正則表達(dá)式相匹配的內(nèi)容。 函數(shù)例程:函數(shù)例程: 54 函數(shù)語法
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 網(wǎng)絡(luò)工程 課程設(shè)計
- 2024版股權(quán)轉(zhuǎn)讓三方協(xié)議合同模板
- 2025年滬科版必修2生物上冊月考試卷含答案
- 2025年小學(xué)生校園安全管理與監(jiān)督合同3篇
- 工業(yè)級集線器安全操作規(guī)程
- 2025年華師大新版六年級語文下冊月考試卷
- 日照微孔聲屏障施工方案
- 二零二五年度電梯乘客安全防護(hù)系統(tǒng)安裝合同2篇
- 2025年滬科版必修2生物上冊階段測試試卷含答案
- 2025年滬科版選修4地理下冊階段測試試卷
- 2024年防災(zāi)科技學(xué)院漢語言文學(xué)專業(yè)《現(xiàn)代漢語》期末試卷A(有答案)
- 多旋翼無人機(jī)駕駛員執(zhí)照(CAAC)備考試題庫大全-下部分
- 水務(wù)集團(tuán)定崗定員方案范文
- 實際控制人與法人協(xié)議模板
- 期末核心素養(yǎng)測評卷2023-2024學(xué)年語文五年級上冊+統(tǒng)編版
- 上海八年級數(shù)學(xué)上期末幾何提優(yōu)題目集錦
- DB32T3494-2019灌漿復(fù)合瀝青路面施工技術(shù)規(guī)范
- 2024年石油石化技能考試-石油鉆井工筆試參考題庫含答案
- DLT 5175-2021 火力發(fā)電廠熱工開關(guān)量和模擬量控制系統(tǒng)設(shè)計規(guī)程-PDF解密
- 110kV變電站及110kV輸電線路運維投標(biāo)技術(shù)方案(第一部分)
- 福建省泉州市晉江市2023屆九年級上學(xué)期期末考試數(shù)學(xué)試卷(含答案)
評論
0/150
提交評論