PHP教程正則表達(dá)式ppt課件_第1頁
PHP教程正則表達(dá)式ppt課件_第2頁
PHP教程正則表達(dá)式ppt課件_第3頁
PHP教程正則表達(dá)式ppt課件_第4頁
PHP教程正則表達(dá)式ppt課件_第5頁
已閱讀5頁,還剩51頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、基本概念基本概念正則表達(dá)式語法規(guī)則正則表達(dá)式語法規(guī)則PCRE (Perl) PCRE (Perl) 兼容正則表達(dá)式函數(shù)兼容正則表達(dá)式函數(shù)POSIX POSIX 擴(kuò)展正則表達(dá)式函數(shù)擴(kuò)展正則表達(dá)式函數(shù) 正則表達(dá)式簡介正則表達(dá)式簡介正則表達(dá)式是用于描述字符排列和匹配模式的一種語正則表達(dá)式是用于描述字符排列和匹配模式的一種語法規(guī)則。它主要用于字符串的模式分割、匹配、查找法規(guī)則。它主要用于字符串的模式分割、匹配、查找及替換操作。及替換操作。到目前為止,我們前面所用過的精確(文本)匹配也是一種正則表達(dá)式。在PHP中,正則表達(dá)式一般是由正規(guī)字符和一些特殊字符(類似于通配符)聯(lián)合構(gòu)成的一個(gè)文本模式的程序性描述

2、。在PHP中有兩套正則表達(dá)式函數(shù)庫,兩者功能相似,只是執(zhí)行效率略有差異:一套是由PCRE(Perl Compatible Regular Expression)庫提供的。使用“preg_”為前綴命名的函數(shù);一套由POSIX(Portable Operating System Interface of Unix )擴(kuò)展提供的。使用以“ereg_”為前綴命名的函數(shù);使用正則表達(dá)式的原因之一,是在典型的搜索和替換操作中,只能對確切文字進(jìn)行匹配,對象動態(tài)文本的搜索就有困難了,甚至是不可能的。舉例:想一想這兩個(gè)正則表達(dá)式做什么用?/-?d+$|-?0 xXda-fA-F+$/0-9a-zA-Z_-+0-

3、9a-zA-Z_-+(.0-9a-zA-Z_-+)0,3$/正則表達(dá)式較重要和較有用的角色是驗(yàn)證用戶數(shù)據(jù)的有效性檢查。PHP中,正則表達(dá)式有三個(gè)作用: 匹配,也常常用于從字符串中析取信息。 用新文本代替匹配文本。 將一個(gè)字符串拆分為一組更小的信息塊。PCRE全稱為Perl Compatible Regular Expression,意思是Perl兼容正則表達(dá)式。PCRE來源于Perl語言,而Perl是對字符串操作功能最強(qiáng)大的語言之一,PHP的最初版本就是由Perl開發(fā)的產(chǎn)品。PCRE語法支持更多特性,比POSIX語法更強(qiáng)大,實(shí)現(xiàn)相同的功能函數(shù),使用PCRE庫的效率略占優(yōu)勢。但是它們也有很多相同

4、點(diǎn)。在PCRE中,通常將模式表達(dá)式(即正則表達(dá)式)包含在兩個(gè)反包含在兩個(gè)反斜線斜線“/ /”之間,如之間,如“/apple/apple/”。用戶只要把需要匹配的模式內(nèi)容放入定界之間即可。作為定界的字符也不僅僅局限于“/”。除了字母、數(shù)字和斜線“”以外的任何字符都可以作為定界符,像“#”、“/”、“!”等都可以的。正則表達(dá)式主要組成:原子(普通字符,如英文字符)元字符(有特殊功用的字符)模式修正字符(對正則表達(dá)式語義的修正)一個(gè)正則表達(dá)式中至少包含一個(gè)原子。原子是組成正則表達(dá)式的基本單位,在分析正則表達(dá)式時(shí),應(yīng)作為一個(gè)整體。原子字符包括所有的英文字母、數(shù)字、標(biāo)點(diǎn)符號以及其他一些符號。原子也包括以

5、下內(nèi)容。單個(gè)字符、數(shù)字,如az,AZ,09。模式單元,如(ABC)可以理解為由多個(gè)原子組成的大的原子。原子表,如 ABC。重新使用的模式單元,如:1普通轉(zhuǎn)義字符,如:d, D, w轉(zhuǎn)義元字符,如:*,.原子說明-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è)回車符

6、等價(jià)于x0d 或 cMt匹配一個(gè)制表符;等價(jià)于 x09或clv匹配一個(gè)垂直制表符;等價(jià)于x0b或ckoNN匹配一個(gè)八進(jìn)制數(shù)字xNN匹配一個(gè)十六進(jìn)制數(shù)字cC匹配一個(gè)控制字符元字符是用于構(gòu)造規(guī)則表達(dá)式的具有特殊含義的字符。如果要在正則表達(dá)式中包含元字符本身,必須在其前加上”進(jìn)行轉(zhuǎn)義 元字符元字符說明說明*0次、1次或多次匹配其前的原子+1次或多次匹配其前的原子?0次或1次匹配其前的原子|匹配兩個(gè)或多個(gè)選擇 或 A匹配字符串串首的原子$ 或 Z 匹配字符串串尾的原子b匹配單詞的邊界B匹配除單詞邊界以外的部分匹配方括號中的任一原子匹配除方括號中的原子外的任何字符m表示其前原子恰好出現(xiàn)m次m,n表示其前

7、原子至少出現(xiàn)m次,至少出現(xiàn)n次(nm)m,表示其前原子出現(xiàn)不少于m次()整體表示一個(gè)原子. .匹配除換行之外的任何一個(gè)字符在某些情況下,需要對匹配范圍進(jìn)行限定,以獲得更準(zhǔn)確的匹配結(jié)果。“”和“$”分別指定字符串的開始和結(jié)束。例如,在字符串“Tom and Jerry chased each other in the house until toms uncel come in”中元字符元字符“”或或“A”A” 置于字符串的開始確保模式匹配出現(xiàn)在字符串首端;/Tom/元字符元字符“$”$”或或“Z”Z” 置于字符串的結(jié)束,確保模式匹配出現(xiàn)字符串尾端。/in$/如果不加邊界限制元字符,將獲得更多的

8、匹配結(jié)果。/Tom$/精確匹配/Tom/模糊匹配在使用各種編輯軟件的查找功能時(shí),可以通過選擇“按單詞查找”獲得更準(zhǔn)確的結(jié)果。正則表達(dá)式中也提供類似的功能。例如:在字符串“This island is a beautiful land”中元字符元字符“b”b”對單詞的邊界進(jìn)行匹配;/bisb/匹配單詞“is”,不匹配“This”和“island”。/bis/匹配單詞“is”和“island”中的“is”,不匹配“This”元字符元字符“B”B”對除單詞邊界以外的部分進(jìn)行匹配。/BisB/將明確的指示不與單詞的左、右邊界匹配,只匹配單詞 的內(nèi)部。所以在這個(gè)例子中沒有結(jié)果。/Bis/匹配單詞“Thi

9、s”中的“is”正則表達(dá)式中有一些用于重復(fù)匹配某些原子的元字符:“?”、“*”、“+”。他們主要的區(qū)別是重復(fù)匹配的次數(shù)不同。元字符元字符“?”:?”:表示0次或1次匹配緊接在其前的原子。例如:/colou?r/匹配“colour”或“color”。元字符元字符“* *”: :表示0次、1次或多次匹配緊接在其前的原子。例如:/zo*/可以匹配z、zoo元字符元字符“+”:+”:表示1次或多次匹配緊接在其前的原子。例如:/go+gle/匹配“gogle”、“google”或“gooogle”等中間含有多個(gè)o的字符串。元字符元字符“.”.”匹配除換行符外任何一個(gè)字符,相當(dāng)于n(Unix系統(tǒng))或rn(

10、windows系統(tǒng))。例如:/pr.y/可以匹配的字符串“prey”、“pray”或“pr%y”等。通??梢允褂谩?*”組合來匹配除換行符外的任何字符。在一些書籍中也稱其為“全匹配符” 或 “單含匹配符”。例如: /a.*z$/表示可以匹配字母“a”開頭,字母“z”結(jié)束的任意不包括換行符的字符串。 /.+/也可以完成類似的匹配功能所不同的是其至少匹配一個(gè)字符。 /a.+z$/匹配“az”不匹配字符串“az”。元字符元字符“”準(zhǔn)確地指定原子重復(fù)的次數(shù),指定所匹配的原子出現(xiàn)的次數(shù)。“m”表示其前原子恰好出現(xiàn)m次;“m,n”表示其前原子至少出現(xiàn)m次,至多出現(xiàn)n次;“m,”表示其前原子出現(xiàn)不少于m次。

11、例如:/zo1,3m/只能匹配字符串“zom”、“zoom”、或“zooom”。/zo3m/只能匹配字符串“zooom”/zo3,m/可以匹配以 “z” 開頭,“m”結(jié)束,中間至少為3個(gè)“o”的字符串。 /bo0,1u/可以匹配字符串“bought a butter” 中的“bou”和“bu”,等價(jià)于bo?u。原子表原子表”中存放一組原子,彼此地位平等,且僅匹配其中的一個(gè)原子。如果想匹配一個(gè) ”a” 或 ”e” 使用 ae。例如: Praey 匹配 ”Pray” 或者 ”Prey ”。原子表原子表 ” 或者稱為排除原子表,匹配除表內(nèi)原子外的任意一個(gè)字符。例如:/pu/匹配“part”中的“pa

12、”,但無法匹配“computer”中的“pu”因?yàn)椤皍”在匹配中被排除。原子表原子表“-”-”用于連接一組按ASCII碼順序排列的原子,簡化書寫。 例如:/x0123456789/可以寫成x0-9,用來匹配一個(gè)由 “x” 字母與一個(gè)數(shù)字組成的字符串。例如:/a-zA-Z/匹配所有大小寫字母/a-z0-9$/匹配比如“z2”、 “t6” 、“g7”/0 xX0-9a-fA-F/匹配一個(gè)簡單的十六進(jìn)制數(shù)字,如“0 x9”。/0-9a-zA-Z_/匹配除英文字母、數(shù)字和下劃線以外任何一個(gè)字符,其等價(jià)于W。 /0? xX0-9a-fA-F+/匹配十六進(jìn)制數(shù)字,可以匹配“0 x9B3C”或者“X800”

13、等。/可以匹配“”、“”或“”等HTML標(biāo)簽,并且不嚴(yán)格的控制大小寫。元字符元字符“|”|”又稱模式選擇符。在正則表達(dá)式中匹配兩個(gè)或更多的選擇之一。例如:在字符串“There are many apples and pears.”中,/apple|pear/在第一次運(yùn)行時(shí)匹配“apple”;再次運(yùn)行時(shí)匹配“ pear”。也可以繼續(xù)增加選項(xiàng),如:/apple|pear|banana|lemon/元字符元字符“()()”將其中的正則表達(dá)式變?yōu)樵樱ɑ蚍Q模式單元)使用。與數(shù)學(xué)表達(dá)式中的括號類似,“()”可以做一個(gè)單元被單獨(dú)使用。例如: /(Dog)+/匹配的“Dog”、“DogDog”、“DogDo

14、gDog”,因?yàn)榫o接著“+”前的原子是元字符“()”括起來的字符串“Dog”。 /You (very )+ old/匹配“You very old”、“You very very old” /Hello (world|earth)/匹配“Hello world”、“Hello earth”一個(gè)模式單元中的表達(dá)式將被優(yōu)先匹配或運(yùn)算。系統(tǒng)自動將模式單元“()”中的匹配依次存儲起來,在需要時(shí)可以用“1”、“2”、“3”的形式進(jìn)行引用。當(dāng)正則表達(dá)式包含有相同的模式單元時(shí),這種方法非常便于對其進(jìn)行管理。注意使用時(shí)需要寫成“1”、“2”例如:/d2(W)d21d4$/匹配“12-31-2006”、“09/

15、27/1996”、“86 01 4321”等字符串。但上述正則表達(dá)式不匹配“12/34-5678”的格式。這是因?yàn)槟J健癢”的結(jié)果“/”已經(jīng)被存儲。下個(gè)位置“1”引用時(shí),其匹配模式也是字符“/”。當(dāng)不需要存儲匹配結(jié)果時(shí)使用非存儲模式單元“(?:)” 例如/(?:a|b|c)(D|E|F)1g/ 將匹配“aEEg”。在一些正則表達(dá)式中,使用非存儲模式單元是必要的。否則,需要改變其后引用的順序。上例還可以寫成/(a|b|c)(C|E|F)2g/。在PCRE表達(dá)式中的最后一個(gè)分隔符/后,可以添加模式修正符,擴(kuò)展了正則表達(dá)式在字符匹配、替換操作時(shí)的某些功能,修正增強(qiáng)了正則表達(dá)式的處理能力。模式修正符一

16、般標(biāo)記于整個(gè)模式之外,并且可以組合使用,如“/apple/i”、“/cat|dog/uis”等。模式修正符說明i可同時(shí)匹配大小寫字母m將字符串視為多行s將字符串視為單行,換行符做普通字符看 待,使“.”匹配任何字符x模式中的空白忽略不計(jì)S - 當(dāng)一個(gè)模式將被使用若干次時(shí),先對其進(jìn)行 分析U匹配到最近的字符串e將替換的字符串作為表達(dá)使用下面是幾個(gè)簡單的示例,可以說明模式修正符的使用/apple/i匹配“apple”或“Apple”等,忽略大小寫。/I love you/ix匹配“iloveYou”,忽略大小寫以及空白。/ U將依次匹配字符串“Cool music Few years ago. ”

17、中的“”、“”和“”。而/卻匹配到最后一個(gè)可用的字符串,既“Coolmusic” 。/Uis將HTML文件視為單行字符串,忽略大小寫和換行符。匹配其中的所有以“h”開頭的標(biāo)簽,如“”、“”等。在使用正則表達(dá)式時(shí),需要注意匹配的順序。通常,正則表達(dá)式按照由左至右的順序依次匹配。模式匹配的順序(從高到低)順序元字符說明 1() 模式單元 2?* + 重復(fù)匹配 3 $ 邊界限制 4 | 模式選擇preg_match()和preg_match_all()preg_grep()preg_quote()preg_split()preg_replace()preg_match() 函數(shù)函數(shù)原形: int p

18、reg_match(string $pattern, string $content ,array $matches)preg_match()函數(shù)在$content字符串中搜索與$pattern給出的正則表達(dá)式相匹配的內(nèi)容。如果提供了$matches,則將匹配結(jié)果放入其中。$matches0將包含與整個(gè)匹配的文本,$matches1將包含第一個(gè)捕獲的與括號中的模式單元所匹配的內(nèi)容,以此類推。該函數(shù)只作一次匹配,最終返回0或1的判斷是否匹配。 preg_match_all()與preg_match()函數(shù)類似。如果使用了第三個(gè)參數(shù),將把所有可能的匹配結(jié)果放入。本函數(shù)返回整個(gè)模式匹配的次數(shù)(可能為

19、0),如果出錯返回False。 $max_size) $link_text = substr($link_url, 0, $max_size).; else $link_text = $link_url; /生成HTML文字$text = str_replace($link_url,$link_text,$text); return $text;/運(yùn)行實(shí)例$str = “這是一個(gè)包含多個(gè)URL鏈接地址的多行文字。歡迎訪問http:/”;print url2html($str);/*輸出結(jié)果這是一個(gè)包含多個(gè)URL鏈接地址的多行文字。歡迎訪問http:/*/?函數(shù)原型: array preg_gr

20、ep(string $pattern,array $input)preg_grep()函數(shù)返回一個(gè)數(shù)組,其中包括了$input數(shù)組中與$pattern正則表達(dá)式相匹配的單元(注:$input不能為null)。對于輸入數(shù)組$input中的每個(gè)元素,preg_grep()也只進(jìn)行一次匹配。函數(shù)原型string perg_quote(string str,string delimiter)preg_quote轉(zhuǎn)義正則表達(dá)式字符 正則表達(dá)式的特殊字符包括:. + * ? $ ( ) = ! | :preg_split()函數(shù)原型:array preg_split (string $pattern,st

21、ring $string,int $limit,int flags)本函數(shù)返回一個(gè)字符串?dāng)?shù)組,每個(gè)單元為$string經(jīng)正則表達(dá)式$pattern作為邊界分割出的子串。如果設(shè)定了$limit,則返回的數(shù)組最多包含$limit個(gè)單元。而其中最后一個(gè)單元包含了$string中剩余的所有部分。flags可選參數(shù):PREG_SPLIT_NO_EMPTYPREG_SPLIT_NO_EMPTY:只返回非空的成分 PREG_SPLIT_DELIM_CAPTUREPREG_SPLIT_DELIM_CAPTURE :定界符模式中的括號表達(dá)式也會被捕獲并返回 PREG_SPLIT_OFFSET_CAPTUREPR

22、EG_SPLIT_OFFSET_CAPTURE :對每個(gè)出現(xiàn)的匹配結(jié)果也同時(shí)返回其附屬的字符串偏移量 將字符串分割成字符 將字符串分割為匹配項(xiàng)及其偏移量 preg_replace()函數(shù)原形:mixed preg_replace(mixed $patten,mixed $replacement,mixed $subject,int $limit)preg_replace其前三個(gè)參數(shù)均可以使用數(shù)組;第四個(gè)參數(shù)$limit可以設(shè)置替換的次數(shù),默認(rèn)為全部替換。 ?php/字符串$string = Name: NamenEmail: EmailnAddress: Addressn;/模式$patter

23、ns =array(/Address/,/Name/,/Email/);/替換字串$replacements = array (No.5, Wilson St., New York, U.S.A,Thomas Ching,);/輸出模式替換結(jié)果print preg_replace($patterns, $replacements, $string);?POSIX正則表達(dá)式全稱為Portable Operating System Interface of Unix,意為UNIX可移植操作系實(shí)現(xiàn)接口。構(gòu)造POSIX正則表達(dá)式的方法和創(chuàng)建數(shù)學(xué)表達(dá)式的方法一樣,也就是用多種元字符與操作符將小的表達(dá)式結(jié)

24、合在一起來創(chuàng)建更大的表達(dá)式。POSIXPOSIX風(fēng)格風(fēng)格預(yù)定義預(yù)定義的正則表達(dá)式的字符類:的正則表達(dá)式的字符類: :alnum: 字母和數(shù)字字符 :alpha:大小寫字母 :lower:小寫字母 :upper:大寫字母 :digit:數(shù)字0-9 :xdigit:十六進(jìn)制數(shù)字 :punct:標(biāo)點(diǎn)符號,包括上檔鍵! :blank:TAB制表符和空格 :space:任何空白字符,換行,回車符 :cntrl:控制字符(TAB,退格)a-zA-Z0-90-9ta-zA-Za-zA-Z0-9a-fA-F特殊的:graph:是:alpha: :digit: :punct:的合體ereg()和eregi()e

25、reg_replace()和eregi_replace()split()和spliti()ereg()字符串匹配函數(shù),eregi()是ereg()函數(shù)的忽略大小的版本,函數(shù)返回的是一個(gè)布爾值,表明匹配成功與否。需要說明的是,POSIX擴(kuò)展庫函數(shù)的第一個(gè)參數(shù)接受的是正則表達(dá)式字符串,既不需要使用分隔符. 如果只是查找一個(gè)字符串中是否包含某個(gè)子字符串,建議使用strstr()或strpos()函數(shù). ereg_replace()和eregi_replace()函數(shù)原形:string ereg_replace (string $pattern,string $replacement,string $string)string eregi_replace (“正則表達(dá)式”,“目標(biāo)替換字符”,“替換目標(biāo)”)ereg_replace()在$string中搜索模式字符串$pattern,并將所匹配結(jié)果替換為$replacement。當(dāng)$pattern中包含模式單元”()”時(shí),$replacement中形如“1”的位置將依次被這些子模式所匹配的內(nèi)容替換。而“0”是整個(gè)的匹配字符串的內(nèi)容。需要注意的是,在雙引號中反斜線作

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論