PHP網絡編程自學完全手冊 第8章正則表達式_第1頁
PHP網絡編程自學完全手冊 第8章正則表達式_第2頁
PHP網絡編程自學完全手冊 第8章正則表達式_第3頁
PHP網絡編程自學完全手冊 第8章正則表達式_第4頁
PHP網絡編程自學完全手冊 第8章正則表達式_第5頁
已閱讀5頁,還剩21頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第8章正那么表達式正那么表達式應用范圍很廣泛,不僅PHP腳本支持正那么表達式,類似JavaScript這類的客戶端腳本,也提供了對正規表示式的支持。正那么表達式是一種用于模式匹配和替換的表達式,主要用于復雜的字符串操作。本章主要介紹PHP中,關于正那么表達式的函數,以及其在實際應用中的例子。18.1POSIX擴展正那么表達式函數在PHP中,關于正那么表達式的函數不多,但是足以滿足對復雜字符串操作的需要。本節主要介紹正那么表達式的根底知識和相關函數使用方法。28.1.1正那么表達式根底在介紹正那么表達式之前,先對正那么表達式的語法做一下了解。不同的腳本語言,正那么表達式的表示方法略有不同,本小節以PHP作為標準。首選正那么表達式是一個字符串,在這個字符串內,可以設定一些規那么,當正那么表達式函數使用這些規那么時,就可以根據已經設定好的內容,對指定的字符串進行替換或匹配的操作。作為進一步的了解,下面列出幾個簡單的正那么表達式。"\d{6}":表示一個由6位數字組成的字符串。"[A-Za-z0-9]":匹配所有大寫字母、小寫字母及0到9的數字。"^open":表示以open開始的字符串。"something$":表示以something結尾的字符串。"^[a-zA-Z]":表示一個以字母開頭的字符串。"go{2}":表示字母g后面跟著2個o即:goo。38.1.2正那么表達式替換ereg_replace()與str_replace()函數一樣,都可以把字符串中查找到的子字符串,替換為指定的字符串,而ereg_replace()函數,還可以使用正那么表達式來查找和替換,實現更復雜的字符串操作。下面演示ereg_replace()函數的使用方法,代碼如清單所示。清單ereg_replace()函數的使用方法<?php//簡單的替換$year="2021";$string="北京將于二零零八年舉辦奧運會";//使用ereg_replace()函數替換字符串echoereg_replace("二零零八",$year,$string)."<br/>";echoereg_replace("()二零零八","\\12021",$string)."<br/>";echoereg_replace("(()二零零八)","\\22021",$string)."<br/>";echoereg_replace("((())二零零八)","\\32021",$string)."<br/>";//以下情況是非法的echoereg_replace("((())二零零八)","\\42021",$string)."<br/>";//參數2中指定的子字符串數大小括號的嵌套數?>48.1.3正那么表達式匹配使用ereg()函數,可以查找字符串與子字符串匹配的情況,并返回匹配字符的長度,還可以借助參數把返回匹配字符的數組。下面演示ereg函數的使用方法,代碼如清單所示。58.1.4不區分大小寫的正那么表達式替換eregi_replace()與ereg_replace()一樣,都可用于正那么表達式的替換,唯一的區別在于,eregi_replace()函數會忽略要操作字符串中字母的大小寫。下面演示eregi_replace()函數的使用方法,代碼如清單所示。清單eregi_replace()函數的使用方法<?php//定義一個包含有大小寫字母的字符串$string="beijing2021BeiJing";echo"使用ereg_replace()函數替換beijing字符串:<br>";$string=ereg_replace("(beijing)","<b>\\1</b>",$string);echo$string;echo"<br>";echo"<br>使用eregi_replace()函數替換beijing字符串:<br>";$string=eregi_replace("(beijing)","<b>\\1</b>",$string);echo$string;?>68.1.5不區分大小寫的正那么表達式匹配eregi()與ereg()一樣,都可用于正那么表達式的匹配,唯一的區別在于,eregi()函數會忽略要操作字符串中字母的大小寫。下面演示eregi()函數的使用方法,代碼如清單所示。清單eregi()函數的使用方法<?php//定義一個包含有大小寫字母的字符串$string="AAbbBcDDeeEE";if(ereg("abcde","ABCDE",$array)){echo"<b>使用ereg()查找匹配的字符串</b><br>";print_r($array);}if(eregi("abcde","ABCDE",$array)){echo"<b>使用eregi()查找匹配的字符串</b><br>";print_r($array);}?>78.1.6使用正那么表達式分割數組使用split()函數,不僅可以完成與explode()函數同樣的功能,而且還可以根據給出的正那么表達式,來分割字符串,并返回一個數組。下面演示split()函數的使用方法,88.1.7用正那么表達式不區分大小寫將字符串分割到數組中spliti()與split()一樣,都可以根據正那么表達式,來分割字符串,唯一的區別在于,spliti()函數會忽略要操作字符串中字母的大小寫。下面演示spliti()函數的使用方法,代碼如清單所示。清單spliti()函數的使用方法<?php//定義一個包含有大小寫字母的字符串$string="AAbbBcDDeeEE";if(ereg("abcde","ABCDE",$array)){echo"<b>使用ereg()查找匹配的字符串</b><br>";print_r($array);}if(eregi("abcde","ABCDE",$array)){echo"<b>使用eregi()查找匹配的字符串</b><br>";print_r($array);}?>98.1.8產生不區分大小匹配的正那么表達式使用sql_regcase()函數,可以根據參數的字符串,產生一個不區分大小寫的正那么表達式。這大大減少了在腳本中,建立字符匹配正那么表達式的時間。下面演示sql_regcase()函數的使用方法,代碼如清單所示。108.2PERL兼容正那么表達式函數PERL兼容正那么表達式函數,使用的模式類似于Perl中的語法。其表達式應包含在定界符中,除數字、字母、反斜線外的任務字符,都可以做字界符使用,如果作為定界符的字符要出現在表達式中,可以使用反斜線進行轉。118.2.1返回與模式匹配的數組單元使用preg_grep()函數,可以根據給定的字符或正那么表達式,查找指定數組,并返回與查找條件匹配的單元。下面演示preg_grep()函數的使用方法,代碼如清單所示。128.2.2正那么表達式匹配使用preg_match()函數,可以查找字符串與子字符串匹配的情況,并返回匹配字符的長度,還可以借助參數把返回匹配字符的數組。下面演示preg_match()函數的使用方法,代碼如清單所示。138.2.3全局正那么表達式匹配preg_match_all()函數可以在字符串中搜索,與給出的正那么表達式匹配的內容,并將結果按指定的順序放到數組中。preg_match_all()與preg_match()函數的作用都是一樣的,其區別在于,preg_match()函數在搜索到第1個字符匹配后,將停止搜索。而preg_match_all()函數在搜索到第1個匹配后,會從第1個匹配項后繼續搜索,依次類推,直到搜索完整個字符串。下面演示preg_match_all()函數的使用方法,代碼如清單所示。148.2.4轉義正那么表達式字符當在正那么表達式中使用特列符號時,需要對這些特殊符號進行轉義。使用preg_quote()函數,可以對指定的字符串的中特殊字符,自動進行轉義操作,這些字符包括:“.、\、+、*、?、[、^、]、$、(、)、{、}、=、!、<、>、|、:〞。preg_quote()函數,不僅可以用于轉義正那么表達式的特殊字符,也可以為字符串中的特殊字符加上反斜線。下面演示preg_quote()函數的使用方法,代碼如清單所示。158.2.5正那么表達式的搜索和替換使用preg_replace()函數,可以在字符串中搜索,與正那么表達式匹配的項,并替換為一個指定的字符串。preg_replace()函數默認替換所有匹配項,也可以使用參數控制替換的匹配項。preg_replace()函數與ereg_replace()函數,實現的功能是一樣的,下面特別演示preg_replace()函數將HTML轉換為文本的方法,preg_replace()函數有4個參數:第1個參數是必選參數,用于指定要查找的字符或正那么表達式。第2個參數是必選參數,用于指定替換匹配項的字符串。第3個參數是必選參數,用于指定要查找的字符串。第4個參數是可選參數,當使用該參數后,preg_replace()函數會根據這個參數的值,替換個數的匹配項。168.2.6用正那么表達式分割字符串使用preg_split()函數,將返回一個數組,數組的每個單元是使用正那么表達式作為邊界,分割出的子字符串。preg_split()函數還可以設定返回數組單元的個數。下面演示preg_split()函數的使用方法,代碼如清單所示。178.3正那么表達式應用實例正那么表達式主要應用在復雜字符串操作中,最經常使用的是檢驗某類特殊字符串,如:電子郵件地址、IP地址、郵政編碼等。本節將介紹正那么表達式的應用實例,并列出局部常用正那么表達式供讀者參考。188.3.1正那么表達式的應用正那么表達式的應用很廣泛,特別是在一些復雜字符串操作時,使用正那么表達式,將會變得非常簡單。下面簡單演在PHP中使用正那么表達式的方法,定義了一個用于檢查電子郵件地址的函數,其核心語句是ereg()函數。電子郵件地址的命名規那么是:以字母、數字、下劃線及中劃線開頭,后跟“@〞符號,其后跟字母、數字、下劃線及中劃線組成的字符串,其后跟“.〞符號,其后跟字母、數字、下劃線及中劃線組成的字符串,使用正那么表達式表示就是:^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+。在建立與電子郵件地址相匹配的正那么表達式后,就可以使用ereg()函數來對模式與字符串進行匹配,如果相匹配就是正確的電子郵件地址,如果不匹配就是非法郵件地址。198.3.2匹配特定數字正那么表達式可以用于數字的匹配,下面演示特定數字的正那么表達式的方法,代碼如清單所示。208.3.3匹配特定字符串正那么表達式一個重要的作用就是,處理復雜的字符串,而字符串匹配,主要是針對26個英文字母來進行的。下面演示匹配特定字符串的正那么表達式,代碼如清單所示。218.3.4常用正那么表達式除了用于匹配特定數字和字符外,下面列出一些常用的正那么表達式,供讀者參考,演示代碼如清單所示。228.4常見問題正那么表達式可以處理很復雜的字符串,但是其語法相對來說也是比較復雜,在學習正那么表達式時,注意多參考例子。由于正那么表達式函數實現的功能,有一些字符串函數也可以實現,所以在實際應用中,應該根據實際情況選擇使用。238.4.1關于正那么表達式的語法在本章中,介紹了正那么表達式的相關語法,其中主要語法都可以在表8-1中查找。表8-1中的正那么表達式語法,包括了POSIX擴展與PERL兼容兩種正那么表達式的語法,在使用時要注意,POSIX擴展正那么表達式函數,不支持類似的表達式:\d、\w等。可以通過一段代碼,來演示兩類函數正那么表達式語法的區別,代碼如下所示。<?php//定義一個字符串,存儲一個網址$url="://rzphp";//使用POSIX擴展正那么表達式函數把網址轉化為一個連接echoereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]","<ahref=\"\\0\">\\0</a>",$url);//使用PERL兼容正那么表達式函數把網址轉化為一個連接echopreg_replace("/[[:alpha:]]+:\/\/[^<>[:space:]]+[[:alnum:]\/]/","<ahref=\"\\0\">\\0</a>",$url);?>248.4.2關于字符串替換正那么表達式函數,如ereg_repalce()、eregi_replace()、preg_replace()函數,都可以實現字符串的替換。但并不是所有的字符串替換,都必須使用正那么表達式來完成,str_replace()在完成普通的字符串替換時,比正那么表達式有優勢,只有在替換復雜的字符串時,正那么表達式才能表達出價值。在同樣使用正那么表達式替

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論