




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