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

下載本文檔

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

文檔簡介

PHP正那么表達(dá)式正那么表達(dá)式根本概念正那么表達(dá)式語法規(guī)那么PCRE(Perl)兼容正那么表達(dá)式函數(shù)POSIX擴(kuò)展正那么表達(dá)式函數(shù)2.正那么表達(dá)式簡介正那么表達(dá)式是用于描述字符排列和匹配模式的一種語法規(guī)那么。它主要用于字符串的模式分割、匹配、查找及替換操作。到目前為止,我們前面所用過的精確〔文本〕匹配也是一種正那么表達(dá)式。在PHP中,正那么表達(dá)式一般是由正規(guī)字符和一些特殊字符〔類似于通配符〕聯(lián)合構(gòu)成的一個(gè)文本模式的程序性描述。3.正那么表達(dá)式簡介在PHP中有兩套正那么表達(dá)式函數(shù)庫,兩者功能相似,只是執(zhí)行效率略有差異:一套是由PCRE〔PerlCompatibleRegularExpression〕庫提供的。使用“preg_〞為前綴命名的函數(shù);一套由POSIX〔PortableOperatingSystemInterfaceofUnix〕擴(kuò)展提供的。使用以“ereg_〞為前綴命名的函數(shù);使用正那么表達(dá)式的原因之一,是在典型的搜索和替換操作中,只能對確切文字進(jìn)行匹配,對象動態(tài)文本的搜索就有困難了,甚至是不可能的。舉例:想一想這兩個(gè)正那么表達(dá)式做什么用?/^-?\d+$|^-?0[xX][\da-fA-F]+$//^[0-9a-zA-Z_-]+@[0-9a-zA-Z_-]+(\.[0-9a-zA-Z_-]+){0,3}$/4.正那么表達(dá)式較重要和較有用的角色是驗(yàn)證用戶數(shù)據(jù)的有效性檢查。PHP中,正那么表達(dá)式有三個(gè)作用:匹配,也常常用于從字符串中析取信息。用新文本代替匹配文本。將一個(gè)字符串拆分為一組更小的信息塊。5.PCRE正那么表達(dá)式PCRE全稱為PerlCompatibleRegularExpression,意思是Perl兼容正那么表達(dá)式。PCRE來源于Perl語言,而Perl是對字符串操作功能最強(qiáng)大的語言之一,PHP的最初版本就是由Perl開發(fā)的產(chǎn)品。PCRE語法支持更多特性,比POSIX語法更強(qiáng)大,實(shí)現(xiàn)相同的功能函數(shù),使用PCRE庫的效率略占優(yōu)勢。但是它們也有很多相同點(diǎn)。在PCRE中,通常將模式表達(dá)式〔即正那么表達(dá)式〕包含在兩個(gè)反斜線“/〞之間,如“/apple/〞。用戶只要把需要匹配的模式內(nèi)容放入定界之間即可。作為定界的字符也不僅僅局限于“/〞。除了字母、數(shù)字和斜線“\〞以外的任何字符都可以作為定界符,像“#〞、“/〞、“!〞等都可以的。6.正那么表達(dá)式的語法規(guī)那么正那么表達(dá)式主要組成:原子〔普通字符,如英文字符〕元字符〔有特殊功用的字符〕模式修正字符〔對正那么表達(dá)式語義的修正〕一個(gè)正那么表達(dá)式中至少包含一個(gè)原子。7.原子(Atom)原子是組成正那么表達(dá)式的根本單位,在分析正那么表達(dá)式時(shí),應(yīng)作為一個(gè)整體。原子字符包括所有的英文字母、數(shù)字、標(biāo)點(diǎn)符號以及其他一些符號。原子也包括以下內(nèi)容。單個(gè)字符、數(shù)字,如a~z,A~Z,0~9。模式單元,如〔ABC〕可以理解為由多個(gè)原子組成的大的原子。原子表,如[ABC]。重新使用的模式單元,如:\\1普通轉(zhuǎn)義字符,如:\d,\D,\w轉(zhuǎn)義元字符,如:\*,\.8.普通轉(zhuǎn)義字符原子 說明---------------------------------------------------------------------------------\d 匹配一個(gè)數(shù)字;等價(jià)于[0-9]\D 匹配除數(shù)字以外任何一個(gè)字符;等價(jià)于[^0-9]\w 匹配一個(gè)英文字母、數(shù)字或下劃線;等價(jià)于[0-9a-zA-Z_]\W 匹配除英文字母、數(shù)字和下劃線以外任何一個(gè)字符;等價(jià)于[^0-9a-zA-Z_]\s 匹配一個(gè)空白字符;等價(jià)于[\f\n\r\t\v]\S 匹配除空白字符以外任何一個(gè)字符;等價(jià)于[^\f\n\r\t\v]\f 匹配一個(gè)換頁符等價(jià)于\x0c或\cL\n 匹配一個(gè)換行符;等價(jià)于\x0a或\cJ\r 匹配一個(gè)回車符等價(jià)于\x0d或\cM\t 匹配一個(gè)制表符;等價(jià)于\x09\或\cl\v 匹配一個(gè)垂直制表符;等價(jià)于\x0b或\ck\oNN 匹配一個(gè)八進(jìn)制數(shù)字\xNN 匹配一個(gè)十六進(jìn)制數(shù)字\cC 匹配一個(gè)控制字符9.元字符(Meta-character)元字符是用于構(gòu)造規(guī)那么表達(dá)式的具有特殊含義的字符。如果要在正那么表達(dá)式中包含元字符本身,必須在其前加上〞\〞進(jìn)行轉(zhuǎn)義 元字符 說明* 0次、1次或?qū)掖纹ヅ淦淝暗脑? 1次或?qū)掖纹ヅ淦淝暗脑? 0次或1次匹配其前的原子| 匹配兩個(gè)或多個(gè)選擇^或\A 匹配字符串串首的原子$或\Z 匹配字符串串尾的原子\b 匹配單詞的邊界\B 匹配除單詞邊界以外的局部[] 匹配方括號中的任一原子[^] 匹配除方括號中的原子外的任何字符{m} 表示其前原子恰好出現(xiàn)m次{m,n} 表示其前原子至少出現(xiàn)m次,至少出現(xiàn)n次(n>m){m,} 表示其前原子出現(xiàn)不少于m次() 整體表示一個(gè)原子. 匹配除換行之外的任何一個(gè)字符10.字符串邊界限制在某些情況下,需要對匹配范圍進(jìn)行限定,以獲得更準(zhǔn)確的匹配結(jié)果?!癪〞和“$〞分別指定字符串的開始和結(jié)束。例如,在字符串“TomandJerrychasedeachotherinthehouseuntiltom’suncelcomein〞中元字符“^〞或“\A〞置于字符串的開始確保模式匹配出現(xiàn)在字符串首端;/^Tom/元字符“$〞或“\Z〞置于字符串的結(jié)束,確保模式匹配出現(xiàn)字符串尾端。/in$/ 如果不加邊界限制元字符,將獲得更多的匹配結(jié)果。/^Tom$/精確匹配 /Tom/模糊匹配11.單詞邊界限制在使用各種編輯軟件的查找功能時(shí),可以通過選擇“按單詞查找〞獲得更準(zhǔn)確的結(jié)果。正那么表達(dá)式中也提供類似的功能。例如:在字符串“Thisislandisabeautifulland〞中元字符“\b〞對單詞的邊界進(jìn)行匹配;/\bis\b/ 匹配單詞“is〞,不匹配“This〞和“island〞。/\bis/ 匹配單詞“is〞和“island〞中的“is〞,不匹配“This〞元字符“\B〞對除單詞邊界以外的局部進(jìn)行匹配。/\Bis\B/ 將明確的指示不與單詞的左、右邊界匹配,只匹配單詞的內(nèi)部。所以在這個(gè)例子中沒有結(jié)果。/\Bis/ 匹配單詞“This〞中的“is〞12.重復(fù)匹配正那么表達(dá)式中有一些用于重復(fù)匹配某些原子的元字符:“?〞、“*〞、“+〞。他們主要的區(qū)別是重復(fù)匹配的次數(shù)不同。元字符“?〞:表示0次或1次匹配緊接在其前的原子。例如:/colou?r/匹配“colour〞或“color〞。元字符“*〞:表示0次、1次或?qū)掖纹ヅ渚o接在其前的原子。例如:/zo*/可以匹配z、zoo元字符“+〞:表示1次或?qū)掖纹ヅ渚o接在其前的原子。例如:/go+gle/匹配“gogle〞、“google〞或“gooogle〞等中間含有多個(gè)o的字符串。13.

任何一個(gè)字符元字符“.〞匹配除換行符外任何一個(gè)字符,相當(dāng)于[^\n](Unix系統(tǒng))或[^\r\n](windows系統(tǒng))。例如:/pr.y/可以匹配的字符串“prey〞、“pray〞或“pr%y〞等。通??梢允褂谩?*〞組合來匹配除換行符外的任何字符。在一些書籍中也稱其為“全匹配符〞或“單含匹配符〞。例如:/^a.*z$/表示可以匹配字母“a〞開頭,字母“z〞結(jié)束的任意不包括換行符的字符串。/.+/也可以完成類似的匹配功能所不同的是其至少匹配一個(gè)字符。/^a.+z$/匹配“a%z〞不匹配字符串“az〞。14.重復(fù)匹配元字符“{}〞準(zhǔn)確地指定原子重復(fù)的次數(shù),指定所匹配的原子出現(xiàn)的次數(shù)?!皗m}〞表示其前原子恰好出現(xiàn)m次;“{m,n}〞表示其前原子至少出現(xiàn)m次,至多出現(xiàn)n次;“{m,}〞表示其前原子出現(xiàn)不少于m次。例如:/zo{1,3}m/只能匹配字符串“zom〞、“zoom〞、或“zooom〞。/zo{3}m/只能匹配字符串“zooom〞/zo{3,}m/可以匹配以“z〞開頭,“m〞結(jié)束,中間至少為3個(gè)“o〞的字符串。/bo{0,1}u/可以匹配字符串“boughtabutter〞中的“bou〞和“bu〞,等價(jià)于bo?u。15.原子表-方括號表達(dá)式原子表〞[]〞中存放一組原子,彼此地位平等,且僅匹配其中的一個(gè)原子。如果想匹配一個(gè)〞a〞或〞e〞使用[ae]。例如:Pr[ae]y匹配〞Pray〞或者〞Prey〞。原子表〞[^]〞或者稱為排除原子表,匹配除表內(nèi)原子外的任意一個(gè)字符。例如:/p[^u]/匹配“part〞中的“pa〞,但無法匹配“computer〞中的“pu〞因?yàn)椤皍〞在匹配中被排除。原子表“[-]〞用于連接一組按ASCII碼順序排列的原子,簡化書寫。例如:/x[0123456789]/可以寫成x[0-9],用來匹配一個(gè)由“x〞字母與一個(gè)數(shù)字組成的字符串。例如:/[a-zA-Z]/匹配所有大小寫字母/^[a-z][0-9]$/匹配比方“z2〞、“t6〞、“g7〞/0[xX][0-9a-fA-F]/匹配一個(gè)簡單的十六進(jìn)制數(shù)字,如“0x9〞。/[^0-9a-zA-Z_]/匹配除英文字母、數(shù)字和下劃線以外任何一個(gè)字符,其等價(jià)于\W。/0?[xX][0-9a-fA-F]+/匹配十六進(jìn)制數(shù)字,可以匹配“0x9B3C〞或者“X800〞等。/<[A-Za-z][A-Za-z0-9]*>/可以匹配“<P>〞、“<hl>〞或“<Body>〞等HTML標(biāo)簽,并且不嚴(yán)格的控制大小寫。16.模式選擇符

元字符“|〞又稱模式選擇符。在正那么表達(dá)式中匹配兩個(gè)或更多的選擇之一。例如:在字符串“Therearemanyapplesandpears.〞中,/apple|pear/在第一次運(yùn)行時(shí)匹配“apple〞;再次運(yùn)行時(shí)匹配“pear〞。也可以繼續(xù)增加選項(xiàng),如: /apple|pear|banana|lemon/17.模式單元

元字符“〔〕〞將其中的正那么表達(dá)式變?yōu)樵印不蚍Q模式單元〕使用。與數(shù)學(xué)表達(dá)式中的括號類似,“〔〕〞可以做一個(gè)單元被單獨(dú)使用。例如:/(Dog)+/匹配的“Dog〞、“DogDog〞、“DogDogDog〞,因?yàn)榫o接著“+〞前的原子是元字符“〔〕〞括起來的字符串“Dog〞。/You(very)+old/匹配“Youveryold〞、“Youveryveryold〞/Hello(world|earth)/匹配“Helloworld〞、“Helloearth〞一個(gè)模式單元中的表達(dá)式將被優(yōu)先匹配或運(yùn)算。18.重新使用的模式單元

系統(tǒng)自動將模式單元“〔〕〞中的匹配依次存儲起來,在需要時(shí)可以用“\1〞、“\2〞、“\3〞的形式進(jìn)行引用。當(dāng)正那么表達(dá)式包含有相同的模式單元時(shí),這種方法非常便于對其進(jìn)行管理。注意使用時(shí)需要寫成“\\1〞、“\\2〞例如:/^\d{2}([\W])\d{2}\\1\d{4}$/匹配“12-31-2006〞、“09/27/1996〞、“86014321〞等字符串。但上述正那么表達(dá)式不匹配“12/34-5678〞的格式。這是因?yàn)槟J健癧\W]〞的結(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/。19.模式修正符〔PatternModifiers〕在PCRE表達(dá)式中的最后一個(gè)分隔符/后,可以添加模式修正符,擴(kuò)展了正那么表達(dá)式在字符匹配、替換操作時(shí)的某些功能,修正增強(qiáng)了正那么表達(dá)式的處理能力。模式修正符一般標(biāo)記于整個(gè)模式之外,并且可以組合使用,如“/apple/i〞、“/cat|dog/uis〞等。

模式修正符 說明 i -可同時(shí)匹配大小寫字母 m -將字符串視為多行 s -將字符串視為單行,換行符做普通字符看 待,使“.〞匹配任何字符 x -模式中的空白忽略不計(jì) S -當(dāng)一個(gè)模式將被使用假設(shè)干次時(shí),先對其進(jìn)行 分析 U -匹配到最近的字符串 e -將替換的字符串作為表達(dá)使用20.下面是幾個(gè)簡單的例如,可以說明模式修正符的使用/apple/i匹配“apple〞或“Apple〞等,忽略大小寫。/Iloveyou/ix匹配“iloveYou〞,忽略大小寫以及空白。/<.*>/U將依次匹配字符串“<b>Cool</b>music<hr>Fewyearsago…..〞中的“<b>〞、“</b>〞和“<hr>〞。而/<.*>/卻匹配到最后一個(gè)可用的字符串,既“<b>Cool</b>music<hr>〞。/<h.*>/Uis將HTML文件視為單行字符串,忽略大小寫和換行符。匹配其中的所有以“h〞開頭的標(biāo)簽,如“<Hl>〞、“<hrsize=1>〞等。21.模式匹配的順序

在使用正那么表達(dá)式時(shí),需要注意匹配的順序。通常,正那么表達(dá)式按照由左至右的順序依次匹配。模式匹配的順序〔從高到低〕 順序 元字符 說明1 〔〕 模式單元 2 ?*+{} 重復(fù)匹配3 ^$ 邊界限制4 | 模式選擇22.PCRE正那么表達(dá)式函數(shù)preg_match()和preg_match_all()preg_grep()preg_quote()preg_split()preg_replace()23.正那么表達(dá)式的匹配preg_match()函數(shù)函數(shù)原形:intpreg_match(string$pattern,string$content[,array$matches]) preg_match()函數(shù)在$content字符串中搜索與$pattern給出的正那么表達(dá)式相匹配的內(nèi)容。如果提供了$matches,那么將匹配結(jié)果放入其中。$matches[0]將包含與整個(gè)匹配的文本,$matches[1]將包含第一個(gè)捕獲的與括號中的模式單元所匹配的內(nèi)容,以此類推。該函數(shù)只作一次匹配,最終返回0或1的判斷是否匹配。24.<?php //需要匹配的字符串。date函數(shù)返回當(dāng)前時(shí)間

$content="Currentdateandtimeis".date("Y-m-dh:ia").",wearelearningPHPtogether."; //使用通常的方法匹配時(shí)間

if(preg_match("/\d{4}-\d{2}-\d{2}\d{2}:\d{2}[ap]m/",$content,$m)){ echo"匹配的時(shí)間是:".$m[0]."\n"; } //由于時(shí)間的模式明顯,也可以簡單的匹配

if(preg_match("/([\d-]{10})([\d:]{5}[ap]m)/",$content,$m)){ echo"當(dāng)前日期是:".$m[1]."\n"; echo"當(dāng)前時(shí)間是:".$m[2]."\n"; }?>25.進(jìn)行全局正那么表達(dá)式匹配preg_match_all() 與preg_match()函數(shù)類似。如果使用了第三個(gè)參數(shù),將把所有可能的匹配結(jié)果放入。本函數(shù)返回整個(gè)模式匹配的次數(shù)〔可能為0〕,如果出錯返回False。26.<?php //功能:將文本中的鏈接地址轉(zhuǎn)成HTML functionurl2html($text) { //匹配一個(gè)URL,直到出現(xiàn)空白為止 preg_match_all("/:\/\/?[^\s]+/i",$text,$links); //設(shè)置頁面顯示URL地址的長度 $max_size=40; foreach($links[0]as$link_url) { //計(jì)算URL的長度。如果超過$max_size的設(shè)置,那么縮短。 $len=strlen($link_url); if($len>$max_size) { $link_text=substr($link_url,0,$max_size)."..."; }else{ $link_text=$link_url; } //生成HTML文字 $text=str_replace($link_url,"<ahref='$link_url'>$link_text</a>",$text); } return$text; }

27.//運(yùn)行實(shí)例 $str=“這是一個(gè)包含多個(gè)URL鏈接地址的多行文字。歡送訪問://taoboor〞; printurl2html($str); /*輸出結(jié)果 這是一個(gè)包含多個(gè)URL鏈接地址的多行文字。歡送訪問<ahref='://taoboor'> ://taoboor</a> */?>28.preg_grep()函數(shù)原型:arraypreg_grep(string$pattern,array$input)preg_grep()函數(shù)返回一個(gè)數(shù)組,其中包括了$input數(shù)組中與$pattern正那么表達(dá)式相匹配的單元〔注:$input不能為null〕。對于輸入數(shù)組$input中的每個(gè)元素,preg_grep()也只進(jìn)行一次匹配。29.<?php $subjects=array( "MechanicalEngineering","Medicine", "SocialScience","Agriculture", "CommercialScience","Politics" );

//匹配所有僅由有一個(gè)單詞組成的科目名

$alonewords=preg_grep("/^[a-z]*$/i",$subjects);?>30.preg_quote函數(shù)原型stringperg_quote(stringstr[,stringdelimiter])preg_quote轉(zhuǎn)義正那么表達(dá)式字符<?php $keywords="$40forag3/400";

$keywords=preg_quote($keywords,"/");

echo$keywords;//輸出\$40forag3\/400?>正那么表達(dá)式的特殊字符包括:.\\+*?[^]$(){}=!<>|:31.正那么表達(dá)式的拆分preg_split()函數(shù)原型:arraypreg_split(string$pattern,string$string[,int$limit[,intflags]])本函數(shù)返回一個(gè)字符串?dāng)?shù)組,每個(gè)單元為$string經(jīng)正那么表達(dá)式$pattern作為邊界分割出的子串。如果設(shè)定了$limit,那么返回的數(shù)組最多包含$limit個(gè)單元。而其中最后一個(gè)單元包含了$string中剩余的所有局部。flags可選參數(shù):PREG_SPLIT_NO_EMPTY:只返回非空的成分PREG_SPLIT_DELIM_CAPTURE:定界符模式中的括號表達(dá)式也會被捕獲并返回PREG_SPLIT_OFFSET_CAPTURE:對每個(gè)出現(xiàn)的匹配結(jié)果也同時(shí)返回其附屬的字符串偏移量32.preg_split()<?php $seek=array(); $text="IhaveadreamthatonedayIcanmakeit.Sojustdoit,nothingisimpossible!";

//將字符串按空白,標(biāo)點(diǎn)符號拆分〔每個(gè)標(biāo)點(diǎn)后也可能跟有空格〕 $words=preg_split("/[.,;!\s']\s*/",$text); $seek=array_count_values($words); echo"共有大約".count($words)."個(gè)單詞。"; echo"其中共有".$seek['I']."個(gè)單詞“I〞。";?>33.將字符串分割成字符<?php

$str='string';

$chars=preg_split('//',$str,-1,

PREG_SPLIT_NO_EMPTY);

print_r($chars);

?>將字符串分割為匹配項(xiàng)及其偏移量<?php

$str='hypertextlanguageprogramming';

$chars=preg_split('//',$str,-1,

PREG_SPLIT_OFFSET_CAPTURE);

print_r($chars);

?>34.正那么表達(dá)式的替換preg_replace()函數(shù)原形:mixedpreg_replace(mixed$patten,mixed$replacement,mixed$subject[,int$limit])preg_replace其前三個(gè)參數(shù)均可以使用數(shù)組;第四個(gè)參數(shù)$limit可以設(shè)置替換的次數(shù),默認(rèn)為全部替換。35.<?php //字符串 $string="Name:{Name}<br>\nEmail:{Email}<br>\nAddress:{Address}<br>\n"; //模式 $patterns=array( "/{Address}/", "/{Name}/", "/{Email}/" ); //替換字串 $replacements=array( "No.5,WilsonSt.,NewYork,U.S.A", "ThomasChing", "tom@emailaddress", ); //輸出模式替換結(jié)果 printpreg_replace($patterns,$replacements,$string);?>36.POSIX正那么表達(dá)式POSIX正那么表達(dá)式全稱為PortableOperatingSystemInterfaceofUnix,意為UNIX可移植操作系實(shí)現(xiàn)接口。構(gòu)造POSIX正那么表達(dá)式的方法和創(chuàng)立數(shù)學(xué)表達(dá)式的方法一樣,也就是用多種元字符與操作符將小的表達(dá)式結(jié)合在一起來創(chuàng)立更大的表達(dá)式。37.POSIX風(fēng)格預(yù)定義的正那么表達(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-9][0-9][\t][a-zA-Z][a-z][A-Z][0-9a-fA-F]特殊的[[:graph:]]是[[:alpha:]][[:digit:]][[:punct:]]的合體38.POSIX正那么表達(dá)式函數(shù)ereg()和eregi()ereg_replace()和eregi_replace()split()和spliti()39.ereg()和eregi()ereg()字符串匹配函數(shù),eregi()是ereg()函數(shù)的忽略大小的版本,函數(shù)返回的是一個(gè)布爾值,說明匹配成功與否。需要說明的是,POSIX擴(kuò)展庫函數(shù)的第一個(gè)參數(shù)接受的是正那么表達(dá)式字符串,既不需要使用分隔符.如果只是查找一個(gè)字符串中是否包含某個(gè)子字符串,建議使用strstr()或strpos()函數(shù).40.<?php $username=$_SERVER['REMOTE_USER']; $filename=$_GET['file']; //對文件名進(jìn)行過濾,以保證系統(tǒng)平安 if(!ereg('^[^./][^/]*$',$userfile)) { die('這是一個(gè)非法的文件名!'); } //對用戶名進(jìn)行過濾 if(!ereg('^[^./][^/]*$',$username)) { die(‘這不是一個(gè)有效的用戶名'); }

//通過平安過濾,拼合文件路徑 $thefile="/home/$username/$filename";?>41.ereg_replace()和eregi_replace()ereg_replace()和eregi_replace()函數(shù)原形:stringereg_replace(string$pattern,string$replacement,

string$string)stringeregi_replace(“正那么表達(dá)式〞,“目標(biāo)替換字符〞,“替換目標(biāo)〞)ereg_replace()在$string中搜索模式字符串$pattern,并將所匹配結(jié)果替換為$replacement。當(dāng)$pattern中包含模式單元〞〔〕〞時(shí),$replacement中形如“\1〞的位置將依次被這些子模式所匹配的內(nèi)容替換。而“\0〞是整個(gè)的匹配字符串的內(nèi)容。需要注意的是,在雙引號中反斜線作為轉(zhuǎn)義符使用,所以必須使用“\\0〞,“\\1〞的形式。eregi_replace()和ereg_replace()的功能一致,只是前者忽略大小寫42.<?php $lines=file('source.php');//將文件讀入數(shù)組中 for($i=0;$i<count($lines);$i++) { //將行末以“\\〞或“#〞開頭的注釋去掉 $lines[$i]=eregi_replace(“(//|#).*$","",$lines[$i]); //將行末的空白消除 $lines[$i]=eregi_replace("[\n\r\t\v\f]*$","\r\n",$lines[$i]); } //整理合并數(shù)組后輸出到頁面 echohtmlspecialchars(implode("",$lines));?>43.正那么表達(dá)式的拆分split()和spliti()函數(shù)原型:arraysplit(string$pattern,string$string[,int$limit])本函數(shù)返回一個(gè)字符串?dāng)?shù)組,每個(gè)單元為$string經(jīng)正那么表達(dá)式$pattern作為邊界分割出的子串。如果設(shè)定了$limit,那么返回的數(shù)組最多包含$limit個(gè)單元。而其中最后一個(gè)單元包含了$string中剩余的所有局部。spliti是split的忽略大小版本。44.<?php $date="08/30/2006";

//分隔符可以是斜線,點(diǎn),或橫線

list($month,$day,$year)=split('[/.-]',$date);

//輸出為另一種時(shí)間格式

echo"Month:$month;Day:$day;Year:$year<br/>\n";?>45.多行匹配僅僅使用POSIX下的正那么表達(dá)式函數(shù),很難進(jìn)行復(fù)雜的匹配操作。例如,對整個(gè)文件〔尤其是多行文本〕進(jìn)行匹配查找。使用ereg()函數(shù)的第三個(gè)參數(shù),對此進(jìn)行操作的一個(gè)方法是分行處理。如果找到與正那么表達(dá)式中圓括號〔〕內(nèi)的相匹配的子串并且函數(shù)調(diào)用給出了第三個(gè)參數(shù)regs,匹配項(xiàng)將被存入第三個(gè)參數(shù)regs數(shù)組中。$regs[1]包含第一個(gè)左圓括號開始的子串,$regs[2]包含第二個(gè)子串,以此類推。$regs[0]包含整個(gè)匹配的字符串。46.<?php $rows=file('php.ini');//將php.ini文件讀到數(shù)組中

//循環(huán)便歷

foreach($rowsas$line) { if(trim($line)) { //將匹配成功的參數(shù)寫入數(shù)組中

if(eregi("^([a-z0-9_.]*)*=(.*)",$line,$matches)) { $options[$matches[1]]=trim($matches[2]); } unset($matches);} } //輸出參數(shù)結(jié)果

print_r($options);?>47.正那么表達(dá)式的Wed驗(yàn)證應(yīng)用電子郵件地址的校驗(yàn)URL地址的校驗(yàn)號碼和郵政編碼的校驗(yàn)48.電子郵件地址的校驗(yàn)<?php /*校驗(yàn)郵件地址*/ functioncheckMail($email){ //用戶名,由“\w〞格式字符、“-〞或“.〞組成 $email_name ="\w|(\w[-.\w]*\w)"; //域名中的第一段,規(guī)那么和

溫馨提示

  • 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

提交評論