




下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、PHP正則表達式,網(wǎng)址: 電話:400 700 1307,正則表達式,基本概念 正則表達式語法規(guī)則 PCRE (Perl) 兼容正則表達式函數(shù) POSIX 擴展正則表達式函數(shù),正則表達式簡介 正則表達式是用于描述字符排列和匹配模式的一種語法規(guī)則。它主要用于字符串的模式分割、匹配、查找及替換操作。到目前為止,我們前面所用過的精確(文本)匹配也是一種正則表達式。 在PHP中,正則表達式一般是由正規(guī)字符和一些特殊字符(類似于通配符)聯(lián)合構成的一個文本模式的程序性描述。,正則表達式簡介,在PHP中有兩套正則表達式函數(shù)庫,兩者功能相似,只是執(zhí)行效率略有差異: 一套是由PCRE(Perl Compatib
2、le Regular Expression)庫提供的。使用“preg_”為前綴命名的函數(shù); 一套由POSIX(Portable Operating System Interface of Unix )擴展提供的。使用以“ereg_”為前綴命名的函數(shù); 使用正則表達式的原因之一,是在典型的搜索和替換操作中,只能對確切文字進行匹配,對象動態(tài)文本的搜索就有困難了,甚至是不可能的。 舉例:想一想這兩個正則表達式做什么用? /-?d+$|-?0 xXda-fA-F+$/ /0-9a-zA-Z_-+0-9a-zA-Z_-+(.0-9a-zA-Z_-+)0,3$/,正則表達式較重要和較有用的角色是驗證用戶數(shù)
3、據(jù)的有效性檢查。PHP中,正則表達式有三個作用: 匹配,也常常用于從字符串中析取信息。 用新文本代替匹配文本。 將一個字符串拆分為一組更小的信息塊。,PCRE正則表達式,PCRE全稱為Perl Compatible Regular Expression,意思是Perl兼容正則表達式。 PCRE來源于Perl語言,而Perl是對字符串操作功能最強大的語言之一,PHP的最初版本就是由Perl開發(fā)的產品。 PCRE語法支持更多特性,比POSIX語法更強大,實現(xiàn)相同的功能函數(shù),使用PCRE庫的效率略占優(yōu)勢。但是它們也有很多相同點。 在PCRE中,通常將模式表達式(即正則表達式)包含在兩個反斜線“/”之
4、間,如“/apple/”。用戶只要把需要匹配的模式內容放入定界之間即可。作為定界的字符也不僅僅局限于“/”。除了字母、數(shù)字和斜線“”以外的任何字符都可以作為定界符,像“#”、“/”、“!”等都可以的。,正則表達式的語法規(guī)則,正則表達式主要組成: 原子(普通字符,如英文字符) 元字符(有特殊功用的字符) 模式修正字符(對正則表達式語義的修正) 一個正則表達式中至少包含一個原子。,原子(Atom),原子是組成正則表達式的基本單位,在分析正則表達式時,應作為一個整體。 原子字符包括所有的英文字母、數(shù)字、標點符號以及其他一些符號。原子也包括以下內容。 單個字符、數(shù)字,如az,AZ,09。 模式單元,如
5、(ABC)可以理解為由多個原子組成的大的原子。 原子表,如 ABC。 重新使用的模式單元,如:1 普通轉義字符,如:d, D, w 轉義元字符,如:*,.,普通轉義字符,原子說明 - d匹配一個數(shù)字;等價于0-9 D匹配除數(shù)字以外任何一個字符;等價于0-9 w匹配一個英文字母、數(shù)字或下劃線;等價于0-9a-zA-Z_ W匹配除英文字母、數(shù)字和下劃線以外任何一個字符;等價于0-9a-zA-Z_ s匹配一個空白字符;等價于fnrtv S匹配除空白字符以外任何一個字符;等價于fnrtv f匹配一個換頁符等價于 x0c 或 cL n匹配一個換行符;等價于 x0a 或 cJ r匹配一個回車符等價于x0d
6、 或 cM t匹配一個制表符;等價于 x09或cl v匹配一個垂直制表符;等價于x0b或ck oNN匹配一個八進制數(shù)字 xNN匹配一個十六進制數(shù)字 cC匹配一個控制字符,元字符(Meta-character),元字符是用于構造規(guī)則表達式的具有特殊含義的字符。如果要在正則表達式中包含元字符本身,必須在其前加上”進行轉義 元字符說明 *0次、1次或多次匹配其前的原子 +1次或多次匹配其前的原子 ?0次或1次匹配其前的原子 |匹配兩個或多個選擇 或 A匹配字符串串首的原子 $ 或 Z 匹配字符串串尾的原子 b匹配單詞的邊界 B匹配除單詞邊界以外的部分 匹配方括號中的任一原子 匹配除方括號中的原子外的
7、任何字符 m表示其前原子恰好出現(xiàn)m次 m,n表示其前原子至少出現(xiàn)m次,至少出現(xiàn)n次(nm) m,表示其前原子出現(xiàn)不少于m次 ()整體表示一個原子 .匹配除換行之外的任何一個字符,字符串邊界限制,在某些情況下,需要對匹配范圍進行限定,以獲得更準確的匹配結果。“”和“$”分別指定字符串的開始和結束。 例如,在字符串“Tom and Jerry chased each other in the house until toms uncel come in”中 元字符“”或“A” 置于字符串的開始確保模式匹配出現(xiàn)在字符串首端; /Tom/ 元字符“$”或“Z” 置于字符串的結束,確保模式匹配出現(xiàn)字符串
8、尾端。 /in$/ 如果不加邊界限制元字符,將獲得更多的匹配結果。 /Tom$/精確匹配/Tom/模糊匹配,單詞邊界限制,在使用各種編輯軟件的查找功能時,可以通過選擇“按單詞查找”獲得更準確的結果。正則表達式中也提供類似的功能。 例如:在字符串“This island is a beautiful land”中 元字符“b”對單詞的邊界進行匹配; /bisb/匹配單詞“is”,不匹配“This”和“island”。 /bis/匹配單詞“is”和“island”中的“is”,不匹配“This” 元字符“B”對除單詞邊界以外的部分進行匹配。 /BisB/將明確的指示不與單詞的左、右邊界匹配,只匹配
9、單詞 的內部。所以在這個例子中沒有結果。 /Bis/匹配單詞“This”中的“is”,重復匹配,正則表達式中有一些用于重復匹配某些原子的元字符:“?”、“*”、“+”。他們主要的區(qū)別是重復匹配的次數(shù)不同。 元字符“?”:表示0次或1次匹配緊接在其前的原子。 例如:/colou?r/匹配“colour”或“color”。 元字符“*”:表示0次、1次或多次匹配緊接在其前的原子。 例如:/zo*/可以匹配z、zoo 元字符“+”:表示1次或多次匹配緊接在其前的原子。 例如:/go+gle/匹配“gogle”、“google”或“gooogle”等中間含有多個o的字符串。,任何一個字符,元字符“.”
10、匹配除換行符外任何一個字符,相當于n(Unix系統(tǒng))或rn(windows系統(tǒng))。 例如:/pr.y/可以匹配的字符串“prey”、“pray”或“pr%y”等。 通??梢允褂谩?*”組合來匹配除換行符外的任何字符。在一些書籍中也稱其為“全匹配符” 或 “單含匹配符”。 例如: /a.*z$/表示可以匹配字母“a”開頭,字母“z”結束的任意不包括換行符的字符串。 /.+/也可以完成類似的匹配功能所不同的是其至少匹配一個字符。 /a.+z$/匹配“az”不匹配字符串“az”。,重復匹配,元字符“”準確地指定原子重復的次數(shù),指定所匹配的原子出現(xiàn)的次數(shù)。 “m”表示其前原子恰好出現(xiàn)m次; “m,n”
11、表示其前原子至少出現(xiàn)m次,至多出現(xiàn)n次; “m,”表示其前原子出現(xiàn)不少于m次。 例如: /zo1,3m/只能匹配字符串“zom”、“zoom”、或“zooom”。 /zo3m/只能匹配字符串“zooom” /zo3,m/可以匹配以 “z” 開頭,“m”結束,中間至少為3個“o”的字符串。 /bo0,1u/可以匹配字符串“bought a butter” 中的“bou”和“bu”,等價于bo?u。,原子表 方括號表達式,原子表”中存放一組原子,彼此地位平等,且僅匹配其中的一個原子。如果想匹配一個 ”a” 或 ”e” 使用 ae。 例如: Praey 匹配 ”Pray” 或者 ”Prey ”。 原
12、子表 ” 或者稱為排除原子表,匹配除表內原子外的任意一個字符。 例如:/pu/匹配“part”中的“pa”,但無法匹配“computer”中的“pu”因為“u”在匹配中被排除。 原子表“-”用于連接一組按ASCII碼順序排列的原子,簡化書寫。 例如:/x0123456789/可以寫成x0-9,用來匹配一個由 “x” 字母與一個數(shù)字組成的字符串。 例如: /a-zA-Z/匹配所有大小寫字母 /a-z0-9$/匹配比如“z2”、 “t6” 、“g7” /0 xX0-9a-fA-F/匹配一個簡單的十六進制數(shù)字,如“0 x9”。 /0-9a-zA-Z_/匹配除英文字母、數(shù)字和下劃線以外任何一個字符,其
13、等價于W。 /0? xX0-9a-fA-F+/匹配十六進制數(shù)字,可以匹配“0 x9B3C”或者“X800”等。 /可以匹配“”、“”或“”等HTML標簽,并且不嚴格的控制大小寫。,模式選擇符,元字符“|”又稱模式選擇符。在正則表達式中匹配兩個或更多的選擇之一。 例如:在字符串“There are many apples and pears.”中,/apple|pear/在第一次運行時匹配“apple”;再次運行時匹配“ pear”。也可以繼續(xù)增加選項,如:/apple|pear|banana|lemon/,模式單元,元字符“()”將其中的正則表達式變?yōu)樵樱ɑ蚍Q模式單元)使用。與數(shù)學表達式中的
14、括號類似,“()”可以做一個單元被單獨使用。 例如: /(Dog)+/匹配的“Dog”、“DogDog”、“DogDogDog”,因為緊接著“+”前的原子是元字符“()”括起來的字符串“Dog”。 /You (very )+ old/匹配“You very old”、“You very very old” /Hello (world|earth)/匹配“Hello world”、“Hello earth” 一個模式單元中的表達式將被優(yōu)先匹配或運算。,重新使用的模式單元,系統(tǒng)自動將模式單元“()”中的匹配依次存儲起來,在需要時可以用“1”、“2”、“3”的形式進行引用。當正則表達式包含有相同的模
15、式單元時,這種方法非常便于對其進行管理。注意使用時需要寫成“1”、“2” 例如: /d2(W)d21d4$/匹配“12-31-2006”、“09/27/1996”、“86 01 4321”等字符串。但上述正則表達式不匹配“12/34-5678”的格式。這是因為模式“W”的結果“/”已經被存儲。下個位置“1”引用時,其匹配模式也是字符“/”。 當不需要存儲匹配結果時使用非存儲模式單元“(?:)” 例如/(?:a|b|c)(D|E|F)1g/ 將匹配“aEEg”。在一些正則表達式中,使用非存儲模式單元是必要的。否則,需要改變其后引用的順序。上例還可以寫成/(a|b|c)(C|E|F)2g/。,模式
16、修正符(Pattern Modifiers),在PCRE表達式中的最后一個分隔符/后,可以添加模式修正符,擴展了正則表達式在字符匹配、替換操作時的某些功能,修正增強了正則表達式的處理能力。模式修正符一般標記于整個模式之外,并且可以組合使用,如“/apple/i”、“/cat|dog/uis”等。 模式修正符說明 i可同時匹配大小寫字母 m將字符串視為多行 s將字符串視為單行,換行符做普通字符看 待,使“.”匹配任何字符 x模式中的空白忽略不計 S - 當一個模式將被使用若干次時,先對其進行 分析 U匹配到最近的字符串 e將替換的字符串作為表達使用,下面是幾個簡單的示例,可以說明模式修正符的使用
17、 /apple/i匹配“apple”或“Apple”等,忽略大小寫。 /I love you/ix匹配“iloveYou”,忽略大小寫以及空白。 / U將依次匹配字符串“Cool music Few years ago. ”中的“”、“”和“”。而/卻匹配到最后一個可用的字符串,既“Coolmusic” 。 /Uis將HTML文件視為單行字符串,忽略大小寫和換行符。匹配其中的所有以“h”開頭的標簽,如“”、“”等。,模式匹配的順序,在使用正則表達式時,需要注意匹配的順序。通常,正則表達式按照由左至右的順序依次匹配。 模式匹配的順序(從高到低) 順序元字符說明 1() 模式單元 2?* + 重復
18、匹配 3 $ 邊界限制 4 | 模式選擇,PCRE正則表達式函數(shù),preg_match()和preg_match_all() preg_grep() preg_quote() preg_split() preg_replace(),正則表達式的匹配,preg_match() 函數(shù) 函數(shù)原形: int preg_match(string $pattern, string $content ,array $matches) preg_match()函數(shù)在$content字符串中搜索與$pattern給出的正則表達式相匹配的內容。如果提供了$matches,則將匹配結果放入其中。$matches0將
19、包含與整個匹配的文本,$matches1將包含第一個捕獲的與括號中的模式單元所匹配的內容,以此類推。該函數(shù)只作一次匹配,最終返回0或1的判斷是否匹配。,進行全局正則表達式匹配,preg_match_all() 與preg_match()函數(shù)類似。如果使用了第三個參數(shù),將把所有可能的匹配結果放入。本函數(shù)返回整個模式匹配的次數(shù)(可能為0),如果出錯返回False。, $max_size) $link_text = substr($link_url, 0, $max_size).; else $link_text = $link_url; /生成HTML文字 $text = str_replace(
20、$link_url,$link_text,$text); return $text; ,/運行實例 $str = “這是一個包含多個URL鏈接地址的多行文字。歡迎訪問”; print url2html($str); /*輸出結果 這是一個包含多個URL鏈接地址的多行文字。歡迎訪問 */ ?,preg_grep(),函數(shù)原型: array preg_grep(string $pattern,array $input) preg_grep()函數(shù)返回一個數(shù)組,其中包括了$input數(shù)組中與$pattern正則表達式相匹配的單元(注:$input不能為null)。 對于輸入數(shù)組$input中的每個元
21、素,preg_grep()也只進行一次匹配。,preg_quote,函數(shù)原型 string perg_quote(string str,string delimiter) preg_quote轉義正則表達式字符 正則表達式的特殊字符包括:. + * ? $ ( ) = ! | :,正則表達式的拆分,preg_split() 函數(shù)原型: array preg_split (string $pattern,string $string,int $limit,int flags) 本函數(shù)返回一個字符串數(shù)組,每個單元為$string經正則表達式$pattern作為邊界分割出的子串。如果設定了$limi
22、t,則返回的數(shù)組最多包含$limit個單元。而其中最后一個單元包含了$string中剩余的所有部分。 flags可選參數(shù): PREG_SPLIT_NO_EMPTY:只返回非空的成分 PREG_SPLIT_DELIM_CAPTURE :定界符模式中的括號表達式也會被捕獲并返回 PREG_SPLIT_OFFSET_CAPTURE :對每個出現(xiàn)的匹配結果也同時返回其附屬的字符串偏移量,preg_split(),將字符串分割成字符 將字符串分割為匹配項及其偏移量 ,正則表達式的替換,preg_replace() 函數(shù)原形: mixed preg_replace(mixed $patten,mixed
23、$replacement,mixed $subject,int $limit) preg_replace其前三個參數(shù)均可以使用數(shù)組;第四個參數(shù)$limit可以設置替換的次數(shù),默認為全部替換。,nEmail: EmailnAddress: Addressn; /模式 $patterns =array( /Address/, /Name/, /Email/ ); /替換字串 $replacements = array ( No.5, Wilson St., New York, U.S.A, Thomas Ching, , ); /輸出模式替換結果 print preg_replace($patte
24、rns, $replacements, $string); ?,POSIX正則表達式,POSIX正則表達式全稱為Portable Operating System Interface of Unix,意為UNIX可移植操作系實現(xiàn)接口。 構造POSIX正則表達式的方法和創(chuàng)建數(shù)學表達式的方法一樣,也就是用多種元字符與操作符將小的表達式結合在一起來創(chuàng)建更大的表達式。,POSIX風格預定義的正則表達式的字符類: :alnum: 字母和數(shù)字字符 :alpha:大小寫字母 :lower:小寫字母 :upper:大寫字母 :digit:數(shù)字0-9 :xdigit:十六進制數(shù)字 :punct:標點符號,包括上
25、檔鍵! :blank:TAB制表符和空格 :space:任何空白字符,換行,回車符 :cntrl:控制字符(TAB,退格),a-zA-Z0-9,0-9,t,a-zA-Z,a-z,A-Z,0-9a-fA-F,特殊的:graph:是:alpha: :digit: :punct:的合體,POSIX正則表達式函數(shù),ereg()和eregi() ereg_replace()和eregi_replace() split()和spliti(),ereg()和eregi(),ereg()字符串匹配函數(shù),eregi()是ereg()函數(shù)的忽略大小的版本,函數(shù)返回的是一個布爾值,表明匹配成功與否。 需要說明的是,POSIX擴展庫函數(shù)的第一個參數(shù)接受的是正則表達式字符串,既不需要使用分隔符. 如果只是查找一個字符串中是否包含某個子字符串,建議使用strstr()或strpos()函數(shù).,ereg_replace()和eregi_replace(),ereg_replace()和eregi_replace() 函數(shù)原形: string ereg_replace (string $pattern,string $replacement,string $string) string eregi_replace (“正則表達式”,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年貴州省安全員B證考試題庫
- 勞務派遣工廠合作合同范本
- 公司底評估合同范本
- 代銷抽成合同范本
- 內蒙公路施工合同范本
- 代銷合同范本版
- 東城區(qū)勞務外包合同范本
- 辦證服務合同范例
- 印刷代加工合同范本
- 出租露營用具合同范本
- 江蘇天嘉宜化工有限公司特大事故警示專題教育課件
- 2023年體育單招英語語法練習專題08 非謂語動詞(含解析)
- 如何抓好學生的行為習慣課件
- 商場裝修管理規(guī)范課件
- 2023年青島恒星科技學院單招綜合素質考試筆試題庫及答案解析
- 民族宗教新疆歷史課件
- PVC注塑問題的改善措施
- 頸動脈斑塊講稿課件
- 部編語文八年級上冊1-3單元教材分析課件
- (完整版)SF-36評分標準
- 研究思路圖模板
評論
0/150
提交評論