




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
8.1正則表達式簡介、語法演講人1正則表達式簡介012PHP正則表達式語法02目錄011正則表達式簡介1正則表達式簡介在某些應用中,有時候需要根據(jù)一定的規(guī)則來匹配(查找)確認一些字符串,如要求用戶輸入的QQ號碼為數(shù)字且至少5位。用于描述這些規(guī)則的工具就是正則表達式。1.1最簡單的匹配最簡單的匹配就是直接給定字符匹配。如用字符a去匹配aabab,則會匹配出3個結果,分別是字符串中的第1,2和第4個字符。這種匹配是最簡單的情況,但往往實際處理中會復雜得多,如下面的“QQ號碼為數(shù)字且至少5位”,其對應的正則表達式為:^\d{5,}$該正則表達式就描述需要確定的內容為至少5位以上的數(shù)字。該表達式是怎么描述這一規(guī)則的:^:表示匹配字符串的開始,也即該字符串是獨立的開始而不是包含在某個字符串之內\d:表示匹配數(shù)字{5,}:表示至少匹配5位及以上1.1最簡單的匹配$:表示匹配字符串的結束,也即該字符串是獨立的結束現(xiàn)在就很清楚了,該正則表達式綜合起來就是匹配5位以上的連續(xù)數(shù)字,且有獨立的開始和結束,對于少于5位的數(shù)字,或者不是以數(shù)字開始和結尾的如a123456b這樣都是無效的。從該實例可以看出,正則表達式是從左至右描述的。同樣,如果要匹配移動號碼的正則表達式為:^1\d{10}$提示由于對正則表達式的匹配結果,在很多情況下都不是那么確定,所以最好下載一些輔助工具用于測試正則表達式的匹配結果。這類工具如MatchTracer、RegExBuilder等,以及其他類似的工具也可。1.2元字符在上面的實例中,^、\d及$等這些符號,代表了特定的匹配意義,稱之為元字符,常用的元字符如下:提示當要匹配這些元字符的時候,需要用到字符轉義功能,同樣正則表達式里面用\來表示轉義,如要匹配.符號,則需要用\.,否則.會被解釋成“除換行符外的任意字符”。當然,要匹配\,則需要寫成\\連續(xù)的數(shù)字或字母可以用–符號連接起來,如匹配所有的小寫字母,[1-5]匹配1至5這5個數(shù)字022PHP正則表達式語法2.1重復規(guī)則正則表達式的威力在于其能夠在模式中包含選擇和循環(huán),正則表達式用一些重復規(guī)則來表達循環(huán)匹配。常用的重復如下:2.2分枝分枝是指制定幾個規(guī)則,如果滿足任意一種規(guī)則,則都當作匹配成功。具體來說就是用|符號把各種規(guī)則分開,且條件從左至右匹配。提示由于分枝規(guī)定,只要匹配成功,就不再對后面的條件加以匹配,所以如果想匹配有包含關系的內容,請注意規(guī)則的順序。下面是一個使用分枝的實例。美國的郵政編碼的規(guī)則是5個數(shù)字或者5個數(shù)字連上4個數(shù)字,如12345或者54321-1234,如果要匹配所有的郵編,則正確的正則表達式為:\d{5}-\d{4}|\d{5}//錯誤寫法2.2分枝\d{5}|\d{5}-\d{4}下面的錯誤寫法,只能匹配到5位數(shù)字及9位數(shù)字的前5位數(shù)字的情況,而不能匹配9位數(shù)字的郵編。2.3分組在正則表達式中,可以用小括號將一些規(guī)則括起來當作分組,分組可以作為一個元字符來看待。分組的實例,驗證IP地址:(\d{1,3}\.){3}\d{1,3}這是一個簡單的且不完善的匹配IP地址的正則表達式,因為它除了能匹配正確的IP地址外,還能匹配如322.197.578.888這種不存在的IP地址。當然,用這個表達式簡單匹配成功后可以在利用PHP的算術比較再加以判斷IP地址是否正確。而正則表達式中沒有提供算術比較功能,如果要完全匹配正確的IP地址,則需要改進如下:((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)2.3分組規(guī)則說明該規(guī)則關鍵之處在于確定IP地址每一段范圍為0-255,然后再重復4次即可。在:25[0-5]|2[0-4]\d|[01]?\d\d?中,用分枝首先確定了250-255和200-249。[01]?\d\d?則確定了0-199的范圍,綜合起來就是0-255。2.4貪婪與懶惰正則表達式默認的情況下,會在滿足匹配條件下盡可能的匹配更多內容。如a.*b,用他來匹配aabab,它會匹配整個aabab,而不會只匹配到aab為止,這就是貪婪匹配。與貪婪匹配對應的是,在滿足匹配條件的情況下盡可能的匹配更少的內容,這就是懶惰匹配。上述實例對應的懶惰匹配規(guī)則為:a.*?b如果用該表達式去匹配aabab,那么就會得到aab和ab這樣兩個匹配結果。常用的懶惰限定符如下:2.5模式修正符模式修正符是標記在整個正則表達式之外的,可以看著是對正則表達式的一些補充說明。常用的模式修正符如下:謝謝PHP正則表達式匹配函數(shù)陳學平8.3正則表達式匹配preg_match與preg_match_all函數(shù)013.1正則表達式在PHP中的應用3.1正則表達式在PHP中的應用在PHP應用中,正則表達式主要用于:正則匹配:根據(jù)正則表達式匹配相應的內容正則替換:根據(jù)正則表達式匹配內容并替換正則分割:根據(jù)正則表達式分割字符串在PHP中有兩類正則表達式函數(shù),一類是Perl兼容正則表達式函數(shù),一類是POSIX擴展正則表達式函數(shù)。二者差別不大,而且推薦使用Perl兼容正則表達式函數(shù),因此下文都是以Perl兼容正則表達式函數(shù)為實例說明。023.2定界符3.2定界符Perl兼容模式的正則表達式函數(shù),其正則表達式需要寫在定界符中。任何不是字母、數(shù)字或反斜線()的字符都可以作為定界符,通常使用/作為定界符。具體使用見下面的實例。注意:盡管正則表達式功能非常強大,但如果用普通字符串處理函數(shù)能完成的,就盡量不要用正則表達式函數(shù),因為正則表達式效率會低得多。3.3preg_match()函數(shù)preg_match()函數(shù)用于進行正則表達式匹配,成功返回1,否則返回0。語法:intpreg_match(stringpattern,stringsubject[,arraymatches])實例1:preg_match()函數(shù)實例代碼如下:<?phpif(preg_match("/php/i","PHPisthewebscriptinglanguageofchoice.",$matches)){3.3preg_match()函數(shù)3.3preg_match()函數(shù)preg_match()第一次匹配成功后就會停止匹配,如果要實現(xiàn)全部結果的匹配,即搜索到subject結尾處,則需使用preg_match_all()函數(shù)。實例2從一個URL中取得主機域名實例代碼如下:<?php//從URL中取得主機名preg_match("/^(http:\/\/)?([^\/]+)/i","/index.html",$matches);3.3preg_match()函數(shù)$host=$matches[2];//從主機名中取得后面兩段preg_match("/[^\.\/]+\.[^\.\/]+$/",$host,$matches);echo"域名為:{$matches[0]}";?>瀏覽器輸出:域名為:3.4
preg_match_all()函數(shù)8.3.4preg_match_all()函數(shù)preg_match_all()函數(shù)用于進行正則表達式全局匹配,成功返回整個模式匹配的次數(shù)(可能為零),如果出錯返回FALSE。語法:intpreg_match_all(stringpattern,stringsubject,arraymatches[,intflags])下面的實例演示了將文本中所有<pre></pre>標簽內的關鍵字(php)顯示為紅色。實例3使用preg_match_all()函數(shù)設置文字實例代碼如下:<?php$str="<pre>學習php是一件快樂的事。</pre><pre>所有的phper需要共同努力!</pre>";$kw="php";preg_match_all('/<pre>([\s\S]*?)<\/pre>/',$str,$mat);for($i=0;$i<count($mat[0]);$i++){$mat[0][$i]=$mat[1][$i];3.4
preg_match_all()函數(shù)$mat[0][$i]=str_replace($kw,'<spanstyle="color:#ff0000">'.$kw.'</span>',$mat[0][$i]);$str=str_replace($mat[1][$i],$mat[0][$i],$str);}echo$str;?>輸出結果學習php是一件快樂的事。所有的phper需要共同努力!3.4
preg_match_all()函數(shù)033.5正則匹配中文漢字3.5正則匹配中文漢字正則匹配中文漢字根據(jù)頁面編碼不同而略有區(qū)別:GBK/GB2312編碼:[x80-xff]+或[xa1-xff]+UTF-8編碼:[x{4e00}-x{9fa5}]+/u實例4:正則匹配中文漢字實例代碼如下:<?php$str="學習php是一件快樂的事。";preg_match_all("/[x80-xff]+/",$str,$match);//UTF-8使用://preg_match_all("/[x{4e00}-x{9fa5}]+/u",$str,$match);print_r($match);?>3.5正則匹配中文漢字//preg_match_all("/[x{4e00}-x{9fa5}]+/u",$str,$match);print_r($match);?>輸出:Array([0]=>Array([0]=>php))謝謝8.4.1正則替換與分割函數(shù)陳學平1.4.1正則替換簡介2.4.2正則替換補充說明3.實例7使用逆向引用4.5.1preg_split()函數(shù)5.5.2split()函數(shù)目錄4.1正則替換簡介preg_replace()函數(shù)用于正則表達式的搜索和替換。語法:mixedpreg_replace(mixedpattern,mixedreplacement,mixedsubject[,intlimit])4.2正則替換補充說明preg_replace()函數(shù)用于正則表達式的搜索和替換。4.2正則替換補充說明上述參數(shù)除limit外都可以是一個數(shù)組。如果pattern和replacement都是數(shù)組,將以其鍵名在數(shù)組中出現(xiàn)的順序來進行處理,這不一定和索引的數(shù)字順序相同。如果使用索引來標識哪個pattern將被哪個replacement來替換,應該在調用preg_replace()之前用ksort()函數(shù)對數(shù)組進行排序。實例5:使用preg_replace()函數(shù)添加-分隔符號實例代碼如下:<?php$str="Thequickbrownfoxjumpedoverthelazydog.";$str=preg_replace('/\s/','-',$str);echo$str;?>輸出結果為:The-quick-brown-fox-jumped-over-the-lazy-dog.4.2正則替換補充說明實例6使用數(shù)組:實例代碼如下:<?php$str="Thequickbrownfoxjumpedoverthelazydog.";$patterns[0]="/quick/";$patterns[1]="/brown/";$patterns[2]="/fox/";$replacements[2]="bear";$replacements[1]="black";$replacements[0]="slow";printpreg_replace($patterns,$replacements,$str);/*輸出:Thebearblackslowjumpedoverthelazydog.*/ksort($replacements);printpreg_replace($patterns,$replacements,$str);/*輸出:Theslowblackbearjumpedoverthelazydog.*/?>實例7使用逆向引用實例代碼如下:<?php$str='<ahref="/">cqcet</a>其他字符<ahref="/">sohu</a>';$pattern="/<a\s([\s\S]*?)>([\s\S]*?)<\/a>/i";printpreg_replace($pattern,'\\2',$str);?>實例7使用逆向引用輸出結果為:該實例演示了將文本中所有的<a></a>標簽去掉。cqcet其他字符sohu8.5PHP正則表達式分割preg_split與split函數(shù)5.1preg_split()函數(shù)preg_split()函數(shù)用于正則表達式分割字符串。語法:arraypreg_split(stringpattern,stringsubject[,intlimit[,intflags]])返回一個數(shù)組,包含subject中沿著與pattern匹配的邊界所分割的子串。實例8:使用preg_split()函數(shù)分割字符串為數(shù)組5.1preg_split()函數(shù)實例代碼如下:<?php$str="phpmysql,apacheajax";$keywords=preg_split("/[\s,]+/",$str);print_r($keywords);?>輸出結果為:Array([0]=>php[1]=>mysql[2]=>apache[3]=>ajax)5.1preg_split()函數(shù)實例9:使用preg_split()函數(shù)分割字符串實例代碼如下:<?php$str='string';$chars=preg_split('//',$str,-1,PREG_SPLIT_NO_EMPTY);print_r($chars);?>輸出結果為:([0]=>s[1]=>t[2]=>r[3]=>i[4]=>n[5]=>g)5.1preg_split()函數(shù)實例10:使用preg_split()函數(shù)分割字符串返回字符串和偏移量實例代碼如下:<?php$str="phpmysql,apacheajax";$keywords=preg_split("/[\s,]+/",$str,-1,PREG_SPLIT_OFFSET_CAPTURE);print_r($keywords);?>5.2split()函數(shù)split()函數(shù)同preg_split()類似,用正則表達式將字符串分割到數(shù)組中,返回一個數(shù)組,但推薦使用preg_split()。語法:arraysplit(stringpattern,stringstring[,intlimit])如果設定了limit,則返回的數(shù)組最多包含limit個單元,而其中最后一個單元包含了string中剩余的所有部分。如果出錯,則返回FALSE。5.2split()函數(shù)實例11:使用split()函數(shù)分割數(shù)組實例代碼如下:<?php$date="2019-05-0820:00:01";print_r(split('[-:]',$date));?>輸出結果:Array([0]=>2019[1]=>05[2]=>08[3]=>20[4]=>00[5]=>01)提示如果不需要正則表達式的功能,可以選擇使用更快(也更簡單)的替代函數(shù)如explode()或str_split()。5.2split()函數(shù)split()函數(shù)對大小寫敏感,如果在匹配字母字符時忽略大小寫的區(qū)別,請使用用法相同的spliti()函數(shù)謝謝8.6PHP常用正則表達式整理陳學平2024-10-186PHP常用正則表達式整理016.1表單驗證匹配驗證賬號,字母開頭,允許5-16字節(jié),允許字母數(shù)字下劃線:^[a-zA-Z][a-zA-Z0-9_]{4,15}$驗證賬號,不能為空,不能有空格,只能是英文字母:^\S+[a-zA-Z]$驗證賬號,不能有空格,不能非數(shù)字:^\d+$驗證用戶密碼,以字母開頭,長度在6-18之間:^[a-zA-Z]\w{5,17}$驗證是否含有^%&',;=?$\等字符:[^%&',;=?$\x22]+匹配Email地址:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*匹配騰訊QQ號:[1-9][0-9]{4,}6.1表單驗證匹配匹配日期,只能是2004-10-22格式:^\d{4}\-\d{1,2}-\d{1,2}$1匹配國內電話號碼:^\d{3}-\d{8}|\d{4}-\d{7,8}$2評注:匹配形式0571-12345678配中國郵政編碼:^[1-9]\d{5}(?!\d)$4匹配身份證:\d{14}(\d{4}|(\d{3}[xX])|\d{1})5評注:中國的身份證為15位或18位6不能為空且二十字節(jié)以上:^[\s|\S]{20,}$76.2字符匹配匹配由26個英文字母組成的字符串:^[A-Za-z]+$匹配由26個小寫英文字母組成的字符串:^[a-z]+$匹配由數(shù)字和26個英文字母組成的字符串:^[A-Za-z0-9]+$匹配由數(shù)字、26個英文字母或者下劃線組成的字符串:^\w+$匹配空行:\n[\s|]*\r匹配任何內容:[\s\S]*匹配中文字符:[\x80-\xff
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度浙江省專利代理師科目一(專利法律知識)押題練習試題A卷含答案
- 哈爾濱學院《高分子材料與工程專業(yè)英語與科技寫作》2023-2024學年第二學期期末試卷
- 銅仁職業(yè)技術學院《物聯(lián)網(wǎng)技術》2023-2024學年第二學期期末試卷
- 燕山大學里仁學院《國際共產主義運動史》2023-2024學年第二學期期末試卷
- 企業(yè)建筑物的智能化節(jié)能降耗措施研究
- 河北體育學院《晉劇身韻技巧與臉譜服飾》2023-2024學年第二學期期末試卷
- 醫(yī)療教育中情感化教學策略的實踐
- 廣東碧桂園職業(yè)學院《機能學實驗(二)》2023-2024學年第二學期期末試卷
- 閩南師范大學《水彩畫語言實驗》2023-2024學年第二學期期末試卷
- 廣東松山職業(yè)技術學院《歷史學科教學論》2023-2024學年第二學期期末試卷
- 對學生課后作業(yè)的調查報告
- 處方點評工作表模板
- 貴陽市南明區(qū)吉祥寵物醫(yī)院建設項目環(huán)評報告
- 智能制造裝備及系統(tǒng) 配套課件
- 遼寧省沈陽市沈北新區(qū)2022-2023學年六年級下學期期末考試語文試題
- 北師大版七年級上冊數(shù)學27有理數(shù)的乘法課件(2課時)
- 安全生產標準化推進計劃 模板
- 2022年咖啡師資格證考試參考題庫及答案
- 新視野大學英語第三版第一冊電子書
- 野生動物管理學知到章節(jié)答案智慧樹2023年東北林業(yè)大學
- 口才與演講實訓教程智慧樹知到答案章節(jié)測試2023年湖南師范大學
評論
0/150
提交評論