




已閱讀5頁,還剩38頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
php正則表達式,講師:韓順平hanshunping,主講韓順平,php進階-內(nèi)容介紹,(一)基礎知識(二)perl兼容正則表達式(三)posix擴展正則表達式,主講韓順平,php進階-期望目標,1.熟練的使用正則表達式,主講韓順平,為什么要學習正則表達式提出問題,給你一個字符串(或一篇文章),請你找出所有四個數(shù)字連在一起的子串?,給你一個字符串(或一篇文章),請你找出所有四個數(shù)字連在一起的子串,并且這四個數(shù)字要滿足:第一位與第四位相同,第二位與第三位相同,比如1221,5775,.,提出幾個問題?,主講韓順平,為什么要學習正則表達式提出問題,提出幾個問題?,給你一個字符串,請在服務器端驗證該字符串是否是一個電子郵件?給你一個字符串,請在服務器端驗證該字符串是否是一個身份證?給你一個字符串,請在服務器端驗證該字符串是否是一個電話號碼?,主講韓順平,為什么要學習正則表達式解決之道,為了解決上述問題(當然類似問題還有很多),php的設計者給我們提供了正則表達式技術,專門用于處理類似問題。,解決之道-正則表達式,主講韓順平,初識正則表達式基本概念,在計算機科學中,是指一個用來描述或者匹配一系列符合某個句法規(guī)則的字符串的單個字符串。在很多文本編輯器或其他工具里,正則表達式通常被用來檢索或替換那些符合某個模式的文本內(nèi)容。許多程序設計語言都支持利用正則表達式進行字符串操作。,正則表達式,javascript,java,php,.,我這里要特別強調(diào),正則表達式不是php的專利產(chǎn)品,實際上很多程序設計語言都支持正則表達式進行字符串操作!如右圖所示。,基本概念,主講韓順平,初識正則表達式基本概念,php中有兩套正則表達式函數(shù)庫,兩者功能相似,就是執(zhí)行效率上有所區(qū)別:一套是由PCRE(PerlCompatibleRegularExpression)庫提供的,使用pcre_為前綴的函數(shù)。(2)一套是由POSIX(PortableOperationSystemInterface)擴展提供的,使用ereg_為前綴的函數(shù)(3)兩套函數(shù)庫的功能相似,執(zhí)行效率稍有不同。一般而言,實現(xiàn)相同的功能,使用PCRE庫的效率略占優(yōu)勢,基本概念,可以查看文檔來具體說明一下。,主講韓順平,初識正則表達式基本概念,一個正則表達式,就是用某種模式去匹配一類字符串的一個公式。很多人因為它們看上去比較古怪而且復雜所以不敢去使用,不過,經(jīng)過一點點練習之后,就覺得這些復雜的表達式其實寫起來還是相當簡單的,而且,一旦你弄懂它們,你就能把數(shù)小時辛苦而且易錯的文本處理工作縮短在幾分鐘(甚至幾秒鐘)內(nèi)完成。,基本概念,主講韓順平,一個正則表達式實例,為讓大家對正則表達式有一個直觀的概念,我先給大家舉一個簡單的實例,學習技術思路:先入門-精通,給你一個字符串(或一篇文章),請你找出所有四個數(shù)字連在一起的子串?,intpreg_match_all(string$pattern,string$subject,array&$matches),一個簡單實例,參看文檔,看看函數(shù)的細節(jié),案例reg01.php,主講韓順平,一個正則表達式實例,上機小練習,針對前面的案例,請大家思考1.如何檢索五個連續(xù)的數(shù)字2.請你找出所有四個數(shù)字連在一起的子串,并且這四個數(shù)字要滿足第一位與第四位相同第二位與第三位相同,比如1221,5775,.3.指定查找某個字串,比如韓順平,如果則提示之,案例exercise01.php,主講韓順平,正則表達式的作用,php中正則表達式的主要作用包括三個方面:匹配(檢索),從給定字串中匹配到符合條件的子串用新的文本替換匹配的文本將給定的字串拆分成符合條件的子串,主講韓順平,pcre函數(shù),pcre函數(shù)preg_filter執(zhí)行一個正則表達式搜索和替換preg_grep返回匹配模式的數(shù)組條目preg_last_error返回最后一個PCRE正則執(zhí)行產(chǎn)生的錯誤代碼preg_match_all執(zhí)行一個全局正則表達式匹配preg_match執(zhí)行一個正則表達式匹配preg_quote轉(zhuǎn)義正則表達式字符preg_replace_callback執(zhí)行一個正則表達式搜索并且使用一個回調(diào)進行替換preg_replace執(zhí)行一個正則表達式的搜索和替換preg_split通過一個正則表達式分隔字符串,參看pcre函數(shù)文檔,各個函數(shù)的詳細用法在后面分別舉例說明,主講韓順平,POSIXRegex函數(shù),ereg_replace正則表達式替換ereg正則表達式匹配eregi_replace不區(qū)分大小寫的正則表達式替換eregi不區(qū)分大小寫的正則表達式匹配split用正則表達式將字符串分割到數(shù)組中spliti用正則表達式不區(qū)分大小寫將字符串分割到數(shù)組中sql_regcase產(chǎn)生用于不區(qū)分大小的匹配的正則表達式,posix和pcre函數(shù)對照表,在php5.3.0,POSIX正則表達式擴展被廢棄,在使用posix正則表達式函數(shù)時總會得到E_DEPRECATEDnotice因此,我們重點講解pcre正則表達式技術,主講韓順平,正則表達式的語法規(guī)則,正則表達式主要包含三個部分:原子(普通字符,比如英文字符、數(shù)字、_等)元字符(有特殊功能的字符)模式修正字符,一個正則表達式至少包含一個原子,主講韓順平,正則表達式的語法-子模式、捕獲、反向引用,如果你認為正則表達式只能檢索固定的字符串或是連續(xù)的幾個數(shù)字,那您就太小看正則表達式了,請看下面一個問題:,給你一個字符串(或一篇文章),請你找出所有四個數(shù)字連在一起的子串,并且這四個數(shù)字要滿足第一位與第四位相同第二位與第三位相同,比如1221,5775,.,請你在服務器端驗證字符串是否是一個電子郵件?請你在服務器端驗證字符串是否是一個身份證?請你在服務器端驗證字符串是否是一個電話號碼?,子模式、捕獲、反向引用,主講韓順平,正則表達式的語法-子模式、捕獲、反向引用,子模式、捕獲、反向引用,要解決前面的問題,我們需要了解正則表達式的幾個概念:子模式我們可以用圓括號組成一個比較復雜的匹配模式,那么一個圓括號的部分我們可以看作是一個子模式。捕獲多個子模式所匹配到的內(nèi)容按順序出現(xiàn)在內(nèi)存的緩沖區(qū)中,這個我們稱為捕獲反向引用圓括號的內(nèi)容被捕獲后,可以在這個括號后被使用,從而寫出一個比較實用的匹配模式,這個我們稱為反向引用,主講韓順平,正則表達式的語法-子模式、捕獲、反向引用,看幾個小案例要匹配兩個連續(xù)的數(shù)字:/(d)1/要匹配五個連續(xù)的數(shù)字:/(d)14/要匹配個位與千位相同,十位與百位相同的數(shù)5225,1551,可以這樣寫:/(d)(d)21/,案例reg.php,請思考下面的問題:請在字符串中檢索商品編號,形式如:12321-333999111這樣的號碼,要求滿足前面是一個五位數(shù),然后一個-號,然后是一個九位數(shù),連續(xù)的每三位要相同,子表達式、捕獲、反向引用,主講韓順平,正則表達式的語法-原子(Atom),原子是組成正則表達式的基本單位,在分析正則表達式時,應作為一個整體。原子字符是由所有末顯式指定為元字符的打印和非打印字符組成。這包括所有的英文字母、數(shù)字、標點符號以及其他一些符號。原子也包括以下內(nèi)容。單個字符、數(shù)字,如az,AZ,09.模式單元,如(ABC).可以理解為由多個原子組成的大的原子。原子表,如ABC.普通轉(zhuǎn)義字符。轉(zhuǎn)義元字符。,主講韓順平,正則表達式的語法-原子(Atom),原子說明-d匹配一個數(shù)字;等價于0-9D匹配除數(shù)字以外任何一個字符;等價于0-9w匹配一個英文字母、數(shù)字或下劃線;等價于0-9a-zA-Z_W匹配除英文字母、數(shù)字和下劃線以外任何一個字符;等價于0-9a-zA-Z_s匹配一個空白字符;等價于fnrtvS匹配除空白字符以外任何一個字符;等價于fnrtvf匹配一個換頁符等價于x0c或cLn匹配一個換行符;等價于x0a或cJr匹配一個回車符等價于x0d或cMt匹配一個制表符;等價于x09或clv匹配一個垂直制表符;等價于x0b或ckoNN匹配一個八進制數(shù)字xNN匹配一個十六進制數(shù)字cC匹配一個控制字符,正則表達式所使用的普通轉(zhuǎn)義字符,主講韓順平,正則表達式的語法-元字符詳解,如果要想靈活的運用正則表達式,必須了解其中各種元字符的功能,元字符從功能上大致分為:,限定符選擇匹配符分組組合和反向引用符特殊字符?字符匹配符?定位符,元字符,主講韓順平,正則表達式的語法-元字符詳解,用于指定其前面的字符和組合項連續(xù)出現(xiàn)多少次,n說明:n表示出現(xiàn)的次數(shù),比如a3,14,(d)2但是這里要注意一點,13去匹配1111111的話,會得到什么結果呢?111111,案例reg07.php,元字符-限定符,主講韓順平,正則表達式的語法-元字符詳解,n,m說明:n表示至少出現(xiàn)的n次最多m次,比如a3,4,14,5,(d)2,5我們看看13,4去匹配1111111的話,會得到什么結果呢?1111111正則表達式在默認匹配中使用的是貪婪匹配的原則,即盡可能匹配多的字符串,這點在上面的案例中體現(xiàn)的很清楚,案例reg07.php,元字符-限定符,主講韓順平,正則表達式的語法-元字符詳解,+說明:+表示出現(xiàn)1次到任意多次,比如/a+/,/1+/,/(d)+/我們看看/1+/去匹配1111111的話,會得到什么結果呢?,案例reg07.htm,元字符-限定符,主講韓順平,正則表達式的語法-元字符詳解,*說明:*表示出現(xiàn)0次到任意多次,比如/a*/,/1*/,/(d)*/我們看看/a1*/去匹配a111的話,會得到什么結果呢?,案例reg07.php,元字符-限定符,主講韓順平,正則表達式的語法-元字符詳解,?說明:?表示出現(xiàn)0次到1次,比如/a?/,/1?/,/(d)?/我們看看/a1?/去匹配a2111的話,會得到什么結果呢?,案例reg07.php,元字符-限定符,主講韓順平,正則表達式的語法-元字符詳解,a-z說明:a-z表示可以匹配a-z中任意一個字符,比如/a-z/,/a-z2/我們看看/A-Z/去匹配a11c8會得到什么結果?,案例reg08.php,元字符-字符匹配符,主講韓順平,正則表達式的語法-元字符詳解,A-Z表示可以匹配A-Z中任意一個字符。0-9表示可以匹配0-9中任意一個字符。這個就不舉例說明了.,元字符-字符匹配符,主講韓順平,正則表達式的語法-元字符詳解,a-z說明:a-z表示可以匹配不是a-z中的任意一個字符,比如/a-z/,/a-z2/我們看看/a-z/去匹配a11c8會得到什么結果?用/a-z2/又會得到什么結果呢?,案例reg08.php,元字符-字符匹配符,主講韓順平,正則表達式的語法-元字符詳解,A-Z表示可以匹配不是A-Z中的任意一個字符。0-9表示可以匹配不是0-9中的任意一個字符。這個就不舉例說明了.,元字符-字符匹配符,主講韓順平,正則表達式的語法-元字符詳解,abcd表示可以匹配abcd中的任意一個字符。abcd表示可以匹配不是abcd中的任意一個字符。當然上面的abcd你可以根據(jù)實際情況修改,以適應你的需求。,案例reg08.php,元字符-字符匹配符,主講韓順平,正則表達式的語法-元字符詳解,d表示可以匹配0-9的任意一個數(shù)字,相當于0-9。D表示可以匹配不是0-9中的任意一個數(shù)字,相當于0-9w匹配任意英文字符、數(shù)字和下劃線,相當于a-zA-Z0-9_W相當于a-zA-Z0-9_是w剛好相反.s匹配任何空白字符(空格,制表符等)S匹配任何非空白字符,和s剛好相反.匹配出n之外的所有字符,如果要匹配.本身則需要使用.,思考題:請編寫一個正則表達式,可以匹配任意三個連續(xù)的字符,案例reg08.php,/(dD)12/,元字符-字符匹配符(即atom原子),主講韓順平,正則表達式的語法-元字符詳解,元字符-特殊字符匹配,主講韓順平,正則表達式的語法-元字符詳解,定位符用于規(guī)定要匹配的字符串出現(xiàn)的位置,比如在字符串的開始還是在結束的位置,這個也是相當有用的,必須掌握。,符號說明:匹配目標字符串的開始位置。比如/han/去匹配“hanshunpinghanhan”,我們看看會得到什么結果?$符號說明:匹配目標字符串的結束位置。比如/han$/去匹配“hanshunpinghanhanuu”,我們看看會得到什么結果?,案例reg10.php,元字符-定位符,主講韓順平,正則表達式的語法-元字符詳解,b符號說明:匹配目標字符串的邊界。這個字符串的邊界,有點不好理解,我給大家舉一個實例說明,比如/hanb/去匹配“hanshunpingsphannnhan”,我們會匹配到“hanshunpingsphannnhan”,所以這里說的字符串的邊界指的是子串間有空格,或者是目標字符串的結束位置,特別注意沒有目標字符串的開始位置B符號說明:匹配目標字符串的非邊界。這個和b的含義剛剛相反,不再贅述,請看一個案例比如/hanB/去匹配“hanshunpingsphannnhan”,我們會匹配到“hanshunpingsphannnhan”,案例reg10.php,元字符-定位符,主講韓順平,正則表達式的語法-元字符詳解,符號說明:在我們使用正則表達式去檢索某些特殊字符的時候,需要用到轉(zhuǎn)義符號,否則檢索不到結果,甚至會報錯的。案例:用/$/去匹配“abc$(”會怎樣?用/(/去匹配“abc$(”會怎樣?,案例reg11.php,元字符-轉(zhuǎn)義符號,主講韓順平,正則表達式的語法-元字符詳解,需要用到轉(zhuǎn)義符號的字符有以下:.*+()$/?,案例reg11.php,元字符-轉(zhuǎn)義符號,主講韓順平,正則表達式的語法-元字符詳解,有時候,我們在匹配某個字符串的時候是選擇性的,即:既可以匹配這個,又可以匹配那個,這時你需要用到選擇匹配符號|,案例reg12.php,選擇匹配符號還是比較好理解的,我們通過一個案例說明:用(han|韓|含)去匹配“hanshunping韓順平”,會得到什么結果?,元字符-選擇匹配符,主講韓順平,正則表達式的語法-模式修正符(patternmodifiers),模式修正符擴展了正則表達式在字符匹配、替換操作時的某些功能。這些擴展或者說修正增強了正則表達式的處理能力。模式修正符一般標記于整個模式之外,并且可以組合使用,如“/apple/i”、“/cat|dog/uis”等。表列出了一些常用的模式修正符極其功能說明。模式修正符說明i可同時匹配大小寫字母M將字符串視為多行s將字符串視為單行,換行符做為普通字符看待x模式中的空白忽略不計S當一個模式將被使用若干次時,為加速匹配起見值得先對其進行分析U匹配到最近的字符串e將替換的字符串作為表達使用,主講韓順平,正則表達式的語法-模式修正符(patternmodifiers),下面是幾個簡單的示例,可以說明模式修正符的使用/apple/i匹配“apple”或“Apple”等
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 房屋拆除協(xié)議
- 世界讀書日公司活動方案
- 業(yè)主diy活動方案
- 業(yè)主延遲交房活動方案
- 地板專場活動方案
- 外賣上線活動策劃方案
- 夏季慰問居民活動方案
- 夏季手機活動方案
- 大學拔河活動方案
- 士氣展示活動方案
- 黑龍江司法警官職業(yè)學院2025年招生政治考察表
- (正式版)CB∕T 4549-2024 船舶行業(yè)企業(yè)加油-駁油作業(yè)安全管理規(guī)定
- 得寶松封閉治療
- 23秋國家開放大學《液壓氣動技術》形考任務1-3參考答案
- 21ZJ111 變形縫建筑構造
- 糖尿病病人的業(yè)務學習課件
- 音頻傳輸系統(tǒng)設計
- 螺旋槳加工與安裝工藝
- 安裝調(diào)試報告
- LED顯示屏合同范本
- 初中化學實驗探究教學方法講座
評論
0/150
提交評論