版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
正則表達(dá)式講義目錄2入門簡介3正則表達(dá)式起源4什么是正則表達(dá)式5范例講解6PHP中使用正則表達(dá)式的函數(shù)7常用表達(dá)式8基本語法9學(xué)習(xí)方法10作業(yè)11參考資料入門簡介簡單的說,正則表達(dá)式是一種可以用于模式匹配和替換的強(qiáng)有力的工具。我們可以在幾乎所有的基于UNIX系統(tǒng)的工具中找到正則表達(dá)式的身影,例如,vi編輯器,Perl或PHP腳本語言,以及awk或sedshell程序等。此外,象JavaScript這種客戶端的腳本語言也提供了對正則表達(dá)式的支持。由此可見,正則表達(dá)式已經(jīng)超出了某種語言或某個系統(tǒng)的局限,成為人們廣為接受的概念和功能。正則表達(dá)式可以讓用戶通過使用一系列的特殊字符構(gòu)建匹配模式,然后把匹配模式與數(shù)據(jù)文件、程序輸入以及WEB頁面的表單輸入等目標(biāo)對象進(jìn)行比較,根據(jù)比較對象中是否包含匹配模式,執(zhí)行相應(yīng)的程序。舉例來說,正則表達(dá)式的一個最為普遍的應(yīng)用就是用于驗證用戶在線輸入的郵件地址的格式是否正確。如果通過正則表達(dá)式驗證用戶郵件地址的格式正確,用戶所填寫的表單信息將會被正常處理;反之,如果用戶輸入的郵件地址與正則表達(dá)的模式不匹配,將會彈出提示信息,要求用戶重新輸入正確的郵件地址。由此可見正則表達(dá)式在WEB應(yīng)用的邏輯判斷中具有舉足輕重的作用。正則表達(dá)式起源正則表達(dá)式的“祖先”可以一直上溯至對人類神經(jīng)系統(tǒng)如何工作的早期研究。WarrenMcCulloch和WalterPitts這兩位神經(jīng)生理學(xué)家研究出一種數(shù)學(xué)方式來描述這些神經(jīng)網(wǎng)絡(luò)。1956年,一位叫StephenKleene的數(shù)學(xué)家在McCulloch和Pitts早期工作的基礎(chǔ)上,發(fā)表了一篇標(biāo)題為“神經(jīng)網(wǎng)事件的表示法”的論文,引入了正則表達(dá)式的概念。正則表達(dá)式就是用來描述他稱為“正則集的代數(shù)”的表達(dá)式,因此采用“正則表達(dá)式”這個術(shù)語。什么是正則表達(dá)式正則表達(dá)式(regularexpression)描述了一種字符串匹配的模式,可以用來檢查一個串是否含有某種子串、將匹配的子串做替換或者從某個串中取出符合某個條件的子串等。列目錄時,dir*.txt或ls*.txt中的*.txt就不是一個正則表達(dá)式,因為這里*與正則式的*的含義是不同的。正則表達(dá)式是由普通字符(例如字符a到z)以及特殊字符(稱為元字符)組成的文字模式。正則表達(dá)式作為一個模板,將某個字符模式與所搜索的字符串進(jìn)行匹配。范例講解正則表達(dá)式是比較抽象的,如:“(19|20)(\d{2})-(\d{1,2})-(\d{1,2})”代表什么呢?如果不是很清楚,那也沒關(guān)系,我們下面一步步地認(rèn)識了解正則表達(dá)式,希望學(xué)完這一節(jié),大家能夠很輕松地了解上述表達(dá)式的意思。首先,讓我們看看兩個特別的字符:’^’和‘$’他們是分別用來匹配字符串的開始和結(jié)束,一下分別舉例說明
"^The":匹配以"The"開頭的字符串;"ofdespair$":匹配以"ofdespair"結(jié)尾的字符串;"^abc$":匹配以abc開頭和以abc結(jié)尾的字符串,實(shí)際上是只有abc與之匹配"notice":匹配包含notice的字符串例:<?php$string="TheDog";$pattern="^The";if(ereg($pattern,$string)){ print"Ture";}else print"Flase";
?>結(jié)果是:Ture
"ab*":匹配字符串a(chǎn)和0個或者更多b組成的字符串("a","ab","abbb",etc.);"ab+":和上面一樣,但最少有一個b("ab","abbb",etc.);"ab?":匹配0個或者一個b;"a?b+$":匹配以一個或者0個a再加上一個以上的b結(jié)尾的字符串.
你也可以在大括號里面限制字符出現(xiàn)的個數(shù),比如
"ab{2}":匹配一個a后面跟兩個b(一個也不能少)("abb");"ab{2,}":最少更兩個b("abb","abbbb",etc.);"ab{3,5}":2-5個b("abbb","abbbb",or"abbbbb").
請注意大括號的使用規(guī)則是"{0,2}",不是"{,2}"),也就是必須指定起始數(shù)。另外,你可能注意到,'*','+',和'?'分別和一下三個范圍標(biāo)注是一樣的,"{0,}","{1,}",和"{0,1}"?,F(xiàn)在把一定數(shù)量的字符放到小括號里,比如:
"a(bc)*":匹配a后面跟0個或者一個"bc";"a(bc){1,5}":一個到5個"bc"
還有一個字符'│',相當(dāng)于OR操作:"hi│hello":匹配含有"hi"或者"hello"的字符串;"(b│cd)ef":匹配含有"bef"或者"cdef"的字符串;"(a│b)*c":匹配含有這樣-多個(包括0個)a或b,后面跟一個c的字符串的字符串;
一個點(diǎn)('.')可以代表所有的單一字符:"a.[0-9]":一個a跟一個字符再跟一個數(shù)字的(含有這樣一個字符串的字符串將被匹配,以后省略此括號)"^.{3}$":以三個字符結(jié)尾.中括號括住的內(nèi)容只匹配一個單一的字符"[ab]":匹配單個的a或者b(和"a│b"一樣);"[a-d]":匹配'a'到'd'的單個字符(和"a│b│c│d"還有"[abcd]"效果一樣);"^[a-zA-Z]":匹配以字母開頭的字符串"[0-9]%":匹配含有形如x%的字符串",[a-zA-Z0-9]$":匹配以逗號在加一個數(shù)字或字母結(jié)尾的字符串你也可以把你不想要得字符列在中括號里,你只需要在總括號里面使用'^'作為開頭(i.e.,"%[^a-zA-Z]%"匹配含有兩個百分號里面有一個非字母的字符串).
如何構(gòu)建一個模式來匹配貨幣數(shù)量的輸入好了,現(xiàn)在我們要用我們所學(xué)的來干一些有用的事:構(gòu)建一個匹配模式去檢查輸入的信息是否為一個表示money的數(shù)字。我們認(rèn)為一個表示money的數(shù)量有四種方式:"10000.00"和"10,000.00",或者沒有小數(shù)部分,"10000"and"10,000".現(xiàn)在讓我們開始構(gòu)建這個匹配模式:^[1-9][0-9]*$這是所變量必須以非0的數(shù)字開頭.但這也意味著單一的"0"也不能通過測試.以下是解決的方法:^(0│[1-9][0-9]*)$"只有0和不以0開頭的數(shù)字與之匹配",我們也可以允許一個負(fù)號再數(shù)字之前:^(0│-?[1-9][0-9]*)$這就是:"0或者一個以0開頭可能有一個負(fù)號在前面的數(shù)字."好了,好了現(xiàn)在讓我們別那么嚴(yán)謹(jǐn),允許以0開頭.現(xiàn)在讓我們放棄負(fù)號,因為我們在表示錢幣的時候并不需要用到.我們現(xiàn)在指定模式用來匹配小數(shù)部分:^[0-9]+(.[0-9]+)?$這暗示匹配的字符串必須最少以一個阿拉伯?dāng)?shù)字開頭.但是注意,在上面模式中"10."是不匹配的,只有"10"和"10.2"才可以.(你知道為什么嗎)^[0-9]+(.[0-9]{2})?$我們上面指定小數(shù)點(diǎn)后面必須有兩位小數(shù).如果你認(rèn)為這樣太苛刻,你可以改成:^[0-9]+(.[0-9]{1,2})?$這將允許小數(shù)點(diǎn)后面有一到兩個字符.現(xiàn)在我們加上用來增加可讀性的逗號(每隔三位),我們可以這樣表示:^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$不要忘記加號'+'可以被乘號'*'替代如果你想允許空白字符串被輸入話(為什么?).也不要忘記反斜桿’’在php字符串中可能會出現(xiàn)錯誤(很普遍的錯誤).現(xiàn)在,我們已經(jīng)可以確認(rèn)字符串了,我們現(xiàn)在把所有逗號都去掉str_replace(",","",$money)然后在把類型看成double然后我們就可以通過他做數(shù)學(xué)計算了.構(gòu)造檢查email的正則表達(dá)式好,讓我們繼續(xù)討論怎么驗證一個email地址.在一個完整的email地址中有三個部分:POP3用戶名(在'@'左邊的一切),'@',服務(wù)器名(就是剩下那部分).用戶名可以含有大小寫字母阿拉伯?dāng)?shù)字,句號('.'),減號('-'),and下劃線('_').服務(wù)器名字也是符合這個規(guī)則,當(dāng)然下劃線除外.現(xiàn)在,用戶名的開始和結(jié)束都不能是句點(diǎn).服務(wù)器也是這樣.還有你不能有兩個連續(xù)的句點(diǎn)他們之間至少存在一個字符,好現(xiàn)在我們來看一下怎么為用戶名寫一個匹配模式:^[_a-zA-Z0-9-]+$現(xiàn)在還不能允許句號的存在.我們把它加上:^[_a-zA-Z0-9-]+(.[_a-zA-Z0-9-]+)*$上面的意思就是說:"以至少一個規(guī)范字符(除.以外)開頭,后面跟著0個或者多個以點(diǎn)開始的字符串."簡單化一點(diǎn),我們可以用eregi()取代ereg().eregi()對大小寫不敏感,我們就不需要指定兩個范圍"a-z"和"A-Z"–只需要指定一個就可以了:^[_a-z0-9-]+(.[_a-z0-9-]+)*$后面的服務(wù)器名字也是一樣,但要去掉下劃線:^[a-z0-9-]+(.[a-z0-9-]+)*$
現(xiàn)在只需要用”@”把兩部分連接:^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*$
這就是完整的email認(rèn)證匹配模式了,只需要調(diào)用eregi(‘^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*$’,$eamil)就可以得到是否為email了PHP中使用正則表達(dá)式的函數(shù)1.用正則表達(dá)式查找子字符串:查找字符串是正則表達(dá)式的主要應(yīng)用,在PHP中,ereg();eregi();preg_match();preg_match_all()。ereg()與eregi()函數(shù)搜索字符串search,在pattern中尋找與正則表達(dá)式相匹配的字符串,如果發(fā)現(xiàn)了與pattern的子表達(dá)式相匹配的字符串,這些字符串將會存儲在數(shù)組matches中,每個數(shù)組元素對應(yīng)一個子表達(dá)式。(函數(shù)eregi()除了不區(qū)分大小寫外,其它功能與ereg()一樣)以下代碼片斷接受ISO格式的日期(YYYY-MM-DD)然后以DD.MM.YYYY格式顯示:<?phpif(ereg("([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})",$date,$regs)){echo"$regs[3].$regs[2].$regs[1]";}else{echo"Invaliddateformat:$date";}?>preg_match()與preg_match_all()區(qū)別.preg_match()返回pattern所匹配的次數(shù)。要么是0次(沒有匹配)或1次,因為preg_match()在第一次匹配之后將停止搜索。preg_match_all()則相反,會一直搜索到subject的結(jié)尾處。如果出錯preg_match()返回FALSE。例:從URL中取出域名<?php//從URL中取得主機(jī)名preg_match("/^(http:\/\/)?([^\/]+)/i","/index.html",$matches);$host=$matches[2];
//從主機(jī)名中取得后面兩段preg_match("/[^\.\/]+\.[^\.\/]+$/",$host,$matches);echo"domainnameis:{$matches[0]}\n";?>本例將輸出:domainnameis:2.使用正則表達(dá)式替換字符串:ereg_replace()和eregi_replace();preg_replace();函數(shù)ereg_replace()和eregi_replace()在字符串seach中查找正則表達(dá)式pattern的字符串,并且用字符串replacement來替換.eregi_replace()不區(qū)分大小寫<?php$patterns=array("/(19|20)(\d{2})-(\d{1,2})-(\d{1,2})/","/^\s*{(\w+)}\s*=/");$replace=array("\\3/\\4/\\1\\2","$\\1=");printpreg_replace($patterns,$replace,"{startDate}=1999-5-27");?>本例將輸出:$startDate=5/27/19993.使用正則表達(dá)式分割字符串函數(shù)是split();spliti();preg_split();preg_spliti();例:split()/spliti()<?php//分隔符可以是斜線,點(diǎn),或橫線$date="04/30/1973";list($month,$day,$year)=split('[/.-]',$date);echo"Month:$month;Day:$day;Year:$year<br/>\n";?>例:preg_split()/preg_spliti()<?php$str='hypertextlanguageprogramming';$chars=preg_split('//',$str,-1,PREG_SPLIT_OFFSET_CAPTURE);print_r($chars);?>將輸出:Array([0]=>Array([0]=>hypertext[1]=>0)
[1]=>Array([0]=>language[1]=>10)
[2]=>Array([0]=>programming[1]=>19)
)常用表達(dá)式"^\d+$"http://非負(fù)整數(shù)(正整數(shù)+0)"^[0-9]*[1-9][0-9]*$"http://正整數(shù)"^((-\d+)|(0+))$"http://非正整數(shù)(負(fù)整數(shù)+0)"^-[0-9]*[1-9][0-9]*$"http://負(fù)整數(shù)"^-?\d+$"http://整數(shù)"^\d+(\.\d+)?$"http://非負(fù)浮點(diǎn)數(shù)(正浮點(diǎn)數(shù)+0)"^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$"http://正浮點(diǎn)數(shù)"^((-\d+(\.\d+)?)|(0+(\.0+)?))$"http://非正浮點(diǎn)數(shù)(負(fù)浮點(diǎn)數(shù)+0)"^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$"http://負(fù)浮點(diǎn)數(shù)"^(-?\d+)(\.\d+)?$"http://浮點(diǎn)數(shù)"^[A-Za-z]+$"http://由26個英文字母組成的字符串"^[A-Z]+$"http://由26個英文字母的大寫組成的字符串"^[a-z]+$"http://由26個英文字母的小寫組成的字符串"^[A-Za-z0-9]+$"http://由數(shù)字和26個英文字母組成的字符串"^\w+$"http://由數(shù)字、26個英文字母或者下劃線組成的字符串"^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$"http://email地址"^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$"http://url/^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$///年-月-日/^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$///月/日/年"^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$"http://Emil/^((\+?[0-9]{2,4}\-[0-9]{3,4}\-)|([0-9]{3,4}\-))?([0-9]{7,8})(\-[0-9]+)?$///電話號碼"^(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5])$"http://IP地址
匹配中文字符的正則表達(dá)式:[\u4e00-\u9fa5]匹配雙字節(jié)字符(包括漢字在內(nèi)):[^\x00-\xff]匹配空行的正則表達(dá)式:\n[\s|]*\r匹配HTML標(biāo)記的正則表達(dá)式:/<(.*)>.*<\/\1>|<(.*)\/>/匹配首尾空格的正則表達(dá)式:(^\s*)|(\s*$)匹配Email地址的正則表達(dá)式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*匹配網(wǎng)址URL的正則表達(dá)式:^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$匹配帳號是否合法(字母開頭,允許5-16字節(jié),允許字母數(shù)字下劃線):^[a-zA-Z][a-zA-Z0-9_]{4,15}$匹配國內(nèi)電話號碼:(\d{3}-|\d{4}-)?(\d{8}|\d{7})?匹配騰訊QQ號:^[1-9]*[1-9][0-9]*$基本語法元字符正則表達(dá)式的威力在于其能夠在模式中包含選擇和循環(huán)。它們通過使用元字符來編碼在模式中,元字符不代表其自身,它們用一些特殊的方式來解析。有兩組不同的元字符:一種是模式中除了方括號內(nèi)都能被識別的,還有一種是在方括號內(nèi)被識別的。方括號之外的元字符有這些:
\有數(shù)種用途的通用轉(zhuǎn)義符^斷言目標(biāo)的開頭(或在多行模式下行的開頭,即緊隨一換行符之后)$斷言目標(biāo)的結(jié)尾(或在多行模式下行的結(jié)尾,即緊隨一換行符之前).匹配除了換行符外的任意一個字符(默認(rèn)情況下)[字符類定義開始]字符類定義結(jié)束|開始一個多選一的分支(子模式開始)子模式結(jié)束?擴(kuò)展(的含義,也是0或1數(shù)量限定符,以及數(shù)量限定符最小值匹配0個或多個的數(shù)量限定符+匹配1個或多個的數(shù)量限定符{最少/最多數(shù)量限定開始}最少/最多數(shù)量限定結(jié)束模式中方括號內(nèi)的部分稱為“字符類”。字符類中可用的元字符為:\通用轉(zhuǎn)義字符^排除字符類,但僅當(dāng)其為第一個字符時有效-指出字符范圍]結(jié)束字符類反斜線(\)反斜線字符有幾種用途。首先,如果其后跟著一個非字母數(shù)字字符,則取消該字符可能具有的任何特殊含義。此種將反斜線用作轉(zhuǎn)義字符的用法適用于無論是字符類之中還是之外。例如,如果想匹配一個“*”字符,則在模式中用“\*”。這適用于無論下一個字符是否會被當(dāng)作元字符來解釋,因此在非字母數(shù)字字符之前加上一個“\”來指明該字符就代表其本身總是安全的。尤其是,如果要匹配一個反斜線,用“\\”。反斜線的第二種用途提供了一種在模式中以可見方式去編碼不可打印字符的方法。并沒有不可打印字符出現(xiàn)的限制,除了代表模式結(jié)束的二進(jìn)制零以外。但用文本編輯器來準(zhǔn)備模式的時候,通常用以下的轉(zhuǎn)義序列來表示那些二進(jìn)制字符更容易一些:\aalarm,即BEL字符(0x07)\cx"control-x",其中x是任意字符\eescape(0x1B)\f換頁符formfeed(0x0C)\n換行符newline(0x0A)\r回車符carriagereturn(0x0D)\t制表符tab(0x09)\xhh十六進(jìn)制代碼為hh的字符\ddd八進(jìn)制代碼為ddd的字符,或backreference
“\cx”的精確效果如下:如果“x”是小寫字母,則被轉(zhuǎn)換為大寫字母。接著字符中的第6位(0x40)被反轉(zhuǎn)。從而“\cz”成為0x1A,但“\c{”成為0x3B,而“\c;”成為0x7B。在“\x”之后最多再讀取兩個十六進(jìn)制數(shù)字(其中的字母可以是大寫或小寫)。在UTF-8模式下,允許用“\x{...}”,花括號中的內(nèi)容是表示十六進(jìn)制數(shù)字的字符串。原來的十六進(jìn)制轉(zhuǎn)義序列\(zhòng)xhh如果其值大于127的話則匹配了一個雙字節(jié)UTF-8字符。在“\0”之后最多再讀取兩個八進(jìn)制數(shù)字。以上兩種情況下,如果少于兩個數(shù)字,則只使用已出現(xiàn)的。因此序列“\0\x\07”代表兩個二進(jìn)制的零加一個BEL字符。如果是八進(jìn)制數(shù)字則確保在開始的零后面再提供兩個數(shù)字。處理反斜線后面跟著一個不是0的數(shù)字比較復(fù)雜。在字符類之外,PCRE以十進(jìn)制數(shù)字讀取該數(shù)字及其后面的數(shù)字。如果數(shù)字小于10,或者之前表達(dá)式中捕獲到至少該數(shù)字的左圓括號,則這個序列將被作為逆向引用。有關(guān)此如何運(yùn)作的說明在后面,以及括號內(nèi)的子模式。在字符類之中,或者如果十進(jìn)制數(shù)字大于9并且之前沒有那么多捕獲的子模式,PCRE重新從反斜線開始讀取其后的最多三個八進(jìn)制數(shù)字,并以最低位的8個比特產(chǎn)生出一個單一字節(jié)。任何其后的數(shù)字都代表自身。例如:\040另一種表示空格的方法\40同上,如果之前捕獲的子模式少于40個的話\7總是一個逆向引用\11可能是個逆向引用,或者是制表符tab\011總是表示制表符tab\0113表示制表符tab后面跟著一個字符“3”\113表示八進(jìn)制代碼為113的字符(因為不能超過99個逆向引用)\377表示一個所有的比特都是1的字節(jié)\81要么是一個逆向引用,要么是一個二進(jìn)制的零后面跟著兩個字符“8”和“1”
注意八進(jìn)制值100或更大的值之前不能以零打頭,因為不會讀?。ǚ葱本€后)超過三個八進(jìn)制數(shù)字。所有的定義了一個單一字節(jié)的序列可以用于字符類之中或之外。此外,在字符類之中,序列“\b”被解釋為反斜線字符(0x08),而在字符類之外有不同含義(見下面)。反斜線的第三個用法是指定通用字符類型:\d任一十進(jìn)制數(shù)字\D任一非十進(jìn)制數(shù)的字符\s任一空白字符\S任一非空白字符\w任一“字”的字符\W任一“非字”的字符
任何一個轉(zhuǎn)義序列將完整的字符組合分割成兩個分離的部分。任一給定的字符匹配一個且僅一個轉(zhuǎn)義序列?!白帧钡淖址侵溉魏我粋€字母或數(shù)字或下劃線,也就是說,任何可以是Perl"word"的字符。字母和數(shù)字的定義由PCRE字符表控制,可能會根據(jù)指定區(qū)域的匹配而改變(見上面的“區(qū)域支持”)。舉例說,在"fr"(French)區(qū)域,某些編碼大于128的字符用來表示重音字母,這些字符能夠被\w所匹配。這些字符類型序列可以出現(xiàn)在字符類之中和之外。每一個匹配相應(yīng)類型中的一個字符。如果當(dāng)前匹配點(diǎn)在目標(biāo)字符串的結(jié)尾,以上所有匹配都失敗,因為沒有字符可供匹配。反斜線的第四個用法是某些簡單的斷言。斷言是指在一個匹配中的特定位置必須達(dá)到的條件,并不會消耗目標(biāo)字符串中的任何字符。子模式中更復(fù)雜的斷言的用法在下面描述。反斜線的斷言有:\b字分界線\B非字分界線\A目標(biāo)的開頭(獨(dú)立于多行模式)\Z目標(biāo)的結(jié)尾或位于結(jié)尾的換行符前(獨(dú)立于多行模式)\z目標(biāo)的結(jié)尾(獨(dú)立于多行模式)\G目標(biāo)中的第一個匹配位置模式修正符下面列出了當(dāng)前在PCRE中可能使用的修正符。括號中是這些修正符的內(nèi)部PCRE名。修正符中的空格和換行被忽略,其它字符會導(dǎo)致錯誤。i(PCRE_CASELESS)如果設(shè)定此修正符,模式中的字符將同時匹配大小寫字母。m(PCRE_MULTILINE)默認(rèn)情況下,PCRE將目標(biāo)字符串作為單一的一“行”字符所組成的(甚至其中包含有換行符也是如此)?!靶衅鹗肌痹址╚)僅僅匹配字符串的起始,“行結(jié)束”元字符($)僅僅匹配字符串的結(jié)束,或者最后一個字符是換行符時其前面(除非設(shè)定了D修正符)。這和Perl是一樣的。當(dāng)設(shè)定了此修正符,“行起始”和“行結(jié)束”除了匹配整個字符串開頭和結(jié)束外,還分別匹配其中的換行符的之后和之前。這和Perl的/m修正符是等效的。如果目標(biāo)字符串中沒有“\n”字符或者模式中沒有^或$,則設(shè)定此修正符沒有任何效果。s(PCRE_DOTALL)如果設(shè)定了此修正符,模式中的圓點(diǎn)元字符(.)匹配所有的字符,包括換行符。沒有此設(shè)定的話,則不包括換行符。這和Perl的/s修正符是等效的。排除字符類例如[^a]總是匹配換行符的,無論是否設(shè)定了此修正符。x(PCRE_EXTENDED)如果設(shè)定了此修正符,模式中的空白字符除了被轉(zhuǎn)義的或在字符類中的以外完全被忽略,在未轉(zhuǎn)義的字符類之外的#以及下一個換行符之間的所有字符,包括兩頭,也都被忽略。這和Perl的/x修正符是等效的,使得可以在復(fù)雜的模式中加入注釋。然而注意,這僅適用于數(shù)據(jù)字符??瞻鬃址赡苡肋h(yuǎn)不會出現(xiàn)于
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 調(diào)研報告:全球及中國新型穿戴設(shè)備市場全景圖譜 出貨量穩(wěn)定增長
- 《工作與健康》課件
- 單位管理制度展示大全【人力資源管理篇】十篇
- 單位管理制度展示大合集【人力資源管理】十篇
- 策略深度報告:1月度金股春季躁動的“科技成長”和“內(nèi)循環(huán)”
- 【大學(xué)課件】市場競爭策略
- 特種設(shè)備安全管理人員和操作人員培訓(xùn)課件
- 2025年中國碘佛醇注射液行業(yè)發(fā)展?jié)摿Ψ治黾巴顿Y戰(zhàn)略咨詢報告
- 中國可信計算機(jī)行業(yè)發(fā)展趨勢預(yù)測及投資戰(zhàn)略咨詢報告
- 穿墻螺栓行業(yè)市場發(fā)展及發(fā)展趨勢與投資戰(zhàn)略研究報告
- 研究生年終總結(jié)研一
- 絲綢之路上的民族學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 山東省濟(jì)寧市2023-2024學(xué)年第一學(xué)期期中質(zhì)量檢測高二數(shù)學(xué)試題含答案
- 醫(yī)療器械委托生產(chǎn)前綜合評價報告
- 2024年自然資源部直屬企事業(yè)單位公開招聘歷年高頻500題難、易錯點(diǎn)模擬試題附帶答案詳解
- 2023年吉林省中考滿分作文《感動盈懷歲月暖》2
- 廣東深圳市龍崗區(qū)產(chǎn)服集團(tuán)招聘筆試題庫2024
- 公路施工表格
- 2024至2030年中國昆明市酒店行業(yè)發(fā)展監(jiān)測及市場發(fā)展?jié)摿︻A(yù)測報告
- 《中國心力衰竭診斷和治療指南2024》解讀(總)
- 科學(xué)新課程標(biāo)準(zhǔn)中核心素養(yǎng)的內(nèi)涵解讀及實(shí)施方略講解課件
評論
0/150
提交評論