




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、第16章 使用正則表達式,正則表達式提供了高效進行查找與替換的方法,使用該種機制,可以使用編程語言快速、高效地完成所需要的查找內(nèi)容以及替換內(nèi)容的操作。作為一種主流的編程語言,PHP也對正則表達式提供了支持,在PHP中使用正則表達式,可以滿足日常各種查找與替換操作。本章就來介紹PHP中正則表達式的使用。 在本章中,將重點學習以下內(nèi)容: 什么是正則表達式 元字符的使用 PERL兼容的正則表達式函數(shù) 正則表達式綜合應用實例,16.1 什么是正則表達式,本節(jié)先來介紹一下什么是正則表達式,正則表達式的構成是怎樣的,正則表達式的特點等。在這之后會通過一個簡單的例子來描述,正則是如何完成匹配與替換操作的。通
2、過本節(jié)的學習,可以對正則表達式這一抽象的概念有一個整體上的認識。,16.1.1 正則表達式入門,在編寫對字符串進行處理的的程序時,經(jīng)常會有查找符合某些復雜規(guī)則的字符串的需要。而正則表達式就是用于描述這些規(guī)則的工具。換句話說,正則表達式就是記錄文本規(guī)則的代碼。 最簡單最常見的正則表達式應用要數(shù)Windows中的查找了。大部分讀者很可能使用過Windows/Dos下用于文件查找的通配符(wildcard),即“*”和“?”。如果要查找某個目錄下的所有的Word文檔,只需要搜索“*.doc”即可。在這里,“*”會被解釋成任意的字符串。,16.1.2 簡單的例子,在了解了什么是正則表達式后,這一節(jié)通過
3、一個簡單的例子來說明,在PHP中如何使用正則表達式。,16.2 元字符,在16.1.2小節(jié)的代碼使用的正則中用到了特殊符號“、“. “、“*”、“$“,這一節(jié)上就來介紹這些特殊字符元字符的使用。那么到底何為元字符?所謂元字符就是指那些在正則表達式中具有特殊意義的專用字符,可以使用這些元字符來規(guī)定其前導字符(即位于元字符前面的字符)在目標對象中的出現(xiàn)模式。,16.2.1 “”、“$”的使用,先來看元字符“”的使用,該元字符表示以匹配字符串的開始。如下所示: /The/ 以上模式將匹配以The開頭的字符串。,16.2.2 “*”、“+”、“?”的使用,這一組元字符用于限定指定字符的個數(shù),下面將分別
4、介紹。 首先來看元字符“*”,該元字符用于限定0次到多次的字符出現(xiàn)次數(shù)。如以下代碼: /a*b/ 該正則用于匹配一個a后面跟0到多個b,如“a“、“ab“、“abb”、“abbbbbb”等。,16.2.2 “*”、“+”、“?”的使用,16.2.3 “”、“”的使用,元字符“”與“”分別是數(shù)量限定符開始和結束的標記。所以,可以在一對大括號中加上指定的數(shù)值來限制字符出現(xiàn)的次數(shù)。 如以下代碼: /ab2/ 匹配一個a后面跟兩個b(一個也不能少)。如“abb”。 /ab2,/ 匹配一個a后面兩個或者更多個“b”(即:最少更兩個b)。如“abb”、“abbbb”等等。 /ab3,5/ 匹配一個a后面跟
5、35個b(僅有三、四、五個三種情況)。如“abbb”、“abbbb”、“abbbbb”。.,16.2.4 “(”、“)”的使用,元字符“(”、“)”的作用是把一定數(shù)量的字符連接起來當作一個使用。如以下代碼: /a(bc)1,5/ 以上正則表達式表示的是要在一個a后面跟上1到5個bc,如abc、abcbc、abcbcbcbcbc等。,16.2.5 “|”的使用,元字符“”相當PHP邏輯表達符中的“OR”,表達邏輯或。即滿足該元字符左邊或者右邊的內(nèi)容都將被認為是匹配的。如以下代碼: /hello|hi/ 以上正則為所有含有:“hello”或者“hi”的內(nèi)容。,16.2.6 “.”的使用,元字符“.
6、”(點號)用于匹配任意一個字符。同樣可以用于匹配通用字符的還有反斜線加其他字符表示,共有以下幾種: d:該符號用于表示任一十進制數(shù)字。 D:該符號用于表示任一非十進制數(shù)的字符。 s:該符號用于表示任一空白字符。 S:該符號用于表示任一非空白字符。 w:該符號用于表示任一“字”的字符。 W:該符號用于表示任一“非字”的字符。,16.2.7 “”、“”的使用,元字符中括號用于實現(xiàn)一個單一的字符的匹配。如以下代碼: /ab/ 匹配單個的a或者b(和/ab/一樣); /a-d/ 匹配a到d的單個字符(和/abcd/以及/abcd/效果一樣)。 /a-zA-Z/ 匹配任意以字母開頭的字符串。 /0-9%
7、/ 匹配含有形如x的字符串。 /,a-zA-Z0-9$/ 匹配以逗號在加一個數(shù)字或字母結尾的字符串。,16.2.8 “”在中括號內(nèi)的使用,前面介紹過,元字符“”表示字符串的開始,其實該元字符還可以用于中括號內(nèi)表示邏輯非。即凡是該符號后中括號的內(nèi)容都不被允許。如以下代碼所規(guī)定的正則規(guī)則: /%a-zA-Z%/ 以上代碼中,規(guī)定的正則內(nèi)容為:在兩個百分號中間帶有的不為任意字母的內(nèi)容。如%5%、%3%將符合正則;而%a%、%d%則不符合正則。,16.2.9 字符轉義,反斜線除了可以加其他字符表示通用字符之外(見16.2.6)還可以對字符進行轉義表示一些不可見的字符內(nèi)容。,16.3 PERL兼容正則表
8、達式函數(shù),PHP中有一類函數(shù)專門用于實現(xiàn)兼容正則表達式的查找、替換與分割等操作。這類PHP函數(shù)完全兼容PERL中的正則表達式使用,按其功能不同有3組共7個函數(shù),分別實現(xiàn):替換、匹配、分割以及產(chǎn)生正則表達式等,下面分別來介紹。,16.3.1 PERL兼容正則模式修正符,模式修正符用于設定正則中的行為,如大小寫敏感、圓點的匹配范圍、美元字符串替換結束的行為等等。,16.3.2 正則表達式匹配,PERL兼容正則表達式函數(shù)中:preg_match()用于實現(xiàn)正則表達式匹配,前面的例子中均使用了該函數(shù)。其完整語法格式如以下代碼所示: int preg_match(string $pattern,stri
9、ng $subject,array $matches,int $flags),16.3.3 正則表達式全局匹配,使用preg_match()僅能對是否符合正則規(guī)則進行匹配,但是卻不能返回匹配次數(shù)。而使用preg_match_all()函數(shù)即可進行全局匹配的操作。該函數(shù)的語法格式如下所示: int preg_match_all(string $pattern,string $subject,array $matches,int $flags),16.3.4 對數(shù)組進行正則匹配,正則匹配除了可以對字符串進行之外還可以以數(shù)組為操作對象,函數(shù):preg_grep()就提供了這樣的功能,其語法格式如下所
10、示: array preg_grep(string $pattern,array $input,int $flag) 以上代碼中參數(shù)$pattern為指定的正則表達式,參數(shù)$input為指定的需要進行匹配的數(shù)組;可選參數(shù)$flag值可以為:PREG_GREP_INVERT,如果指定該值,結果將會返回與正則不匹配的元素。執(zhí)行函數(shù)將根據(jù)指定的內(nèi)容返回與正則匹配(或者不匹配)的數(shù)組元素組成的新數(shù)組。,16.3.4 對數(shù)組進行正則匹配,16.3.5 用正則分割字符串,使用PERL兼容正則表達式函數(shù):preg_split可以將字符串按照正則表達式分割字符串。該函數(shù)的語法格式如以下代碼所示: array
11、preg_split(string $pattern, string $subject,int $limit,int $flags),16.3.6 執(zhí)行正則搜索與替換,使用函數(shù):preg_replace()可以對字符串按照指定正則表達式進行搜索與替換。該函數(shù)的語法格式如以下代碼所示: mixed preg_replace(mixed $pattern,mixed $replacement,$mixed $subject,int $limit) 以上代碼中參數(shù)$pattern為需要搜索的內(nèi)容,既可以是單一字符串也可以是數(shù)組;參數(shù)$replacement為指定的需要替換到的內(nèi)容,也可以是數(shù)組;參數(shù)
12、$subject為執(zhí)行替換的目標內(nèi)容,可以是字符串也可以是數(shù)組;可選參數(shù)$limit用于限定執(zhí)行替換的數(shù)量,如果提供該參數(shù)則僅替換指定個內(nèi)容。,16.3.7 轉義正則表達式字符,使用PERL兼容正則表達式函數(shù):preg_quote()可以對正則元字符等特殊字符進行轉義(加反斜線)。其語法格式如以下代碼所示: string preg_quote(string $str,string $delimiter) 以上代碼中參數(shù)$str為需要進行轉義的字符串;如果使用了可選參數(shù)$delimiter,則參數(shù)的內(nèi)容也將被轉義。,16.4 正則表達式使用實例,前面為讀者介紹了正則的元字符以及PERL兼容的正則
13、表達式函數(shù)的使用,本節(jié)來介紹一些常見的正則規(guī)則。使用這些正則規(guī)則可以快速對指定內(nèi)容進行校驗或者進行替換操作,另外這些內(nèi)容有很強通用性,可以稍做修改甚至不做任何修改即可使用。,16.4.1 校驗是否全由數(shù)字組成,通常在對用戶內(nèi)容進行判斷時需要校驗指定內(nèi)容是否全由數(shù)字組成,使用以下正則即可: /0-9*$/,16.4.2 校驗用戶名,通常的用戶名可以為:以字母開頭,長度在6-18之間,只能包含字符、數(shù)字和下劃線??梢允褂靡韵抡齽t: /a-zA-Zw5,17$/,16.4.3 校驗手機號,當前中國移動通訊的實際情況,手機共有幾個大的運營商,其手機號碼格式也不相同,計有以下幾種: 中國移動:134、1
14、35、136、137、138、139、150、151、152、157、158、159、187、188,147 中國聯(lián)通:130、131、132、155、156、185、186 中國電信:133、153、180、189 CDMA:133、153 用戶可以為每種運營商創(chuàng)建不同的正則。 匹配移動手機號: /1(34-9|5012789|878)d8$/ 匹配電信手機號: /1809d8$/ 匹配聯(lián)通手機號: /1(30-2|556|856)d8$/ 匹配CDMA手機號: /1353d8$/,16.4.4 校驗電子郵箱,判斷指定字符串是否為電子郵箱地址,可以使用以下正則: /_a-z0-9-+(._a-z0-9-+)*a-z0-9-+(.a-z0-9-+)*$/ 該正則表示的意思為:用戶名可以含有大小寫字母阿拉伯數(shù)字、句號(“.”)、減號(“-”)以及下劃線(“_”);服務器名字也是符合這個規(guī)則(下劃線除外)。,16.4.5 UBB替換,UBB是一種可以輸入HTML代碼的替代方案,常用于某些論壇或者其他用戶互動程序中。用戶只需要輸入相應的UBB代碼,即可由程度自動將其轉換為相應的HTML代碼。如以下
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度高端別墅室內(nèi)裝飾設計與施工合同
- 體育產(chǎn)業(yè)智慧場館建設與賽事運營支持方案
- 《國際政治格局演變歷程:高中政治教學教案》
- 乘用車行業(yè)智能化生產(chǎn)與銷售方案
- 經(jīng)典科學故事讀后感
- 車輛銷售服務合同附加條款
- 防盜門銷售合同協(xié)議書
- 服裝公司服裝買賣協(xié)議
- 健康產(chǎn)業(yè)產(chǎn)品推廣與營銷策略
- 裝修增項補充合同協(xié)議
- 生產(chǎn)組織供應能力說明
- 碳酸丙烯酯法脫碳工藝工程設計
- 藥劑學-名詞解釋
- 口語課件Unit 1 Ways of Traveling Possibility and Impossibility
- 做一個幸福教師
- 城市支路施工組織設計
- 耐堿玻纖網(wǎng)格布檢測報告
- 20米往返跑教案 (2)
- 甲醛安全周知卡
- 《書法練習指導》教案江蘇鳳凰少年兒童出版社四年級下冊
- 三菱變頻器e700使用手冊基礎篇
評論
0/150
提交評論