版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
《數(shù)據(jù)結(jié)構(gòu)》算術(shù)表達式求值優(yōu)質(zhì)資料(可以直接使用,可編輯優(yōu)質(zhì)資料,歡迎下載)
二課程設(shè)計2——算術(shù)表達式求值《數(shù)據(jù)結(jié)構(gòu)》算術(shù)表達式求值優(yōu)質(zhì)資料(可以直接使用,可編輯優(yōu)質(zhì)資料,歡迎下載)需求分析程序的主要功能程序運行平臺數(shù)據(jù)結(jié)構(gòu)算法及時間復(fù)雜度測試用例程序源代碼三感想體會與總結(jié)算術(shù)表達式求值一、需求分析一個算術(shù)表達式是由操作數(shù)(operand)、運算符(operator)和界限符(delimiter)組成的。假設(shè)操作數(shù)是正整數(shù),運算符只含加減乘除等四種運算符,界限符有左右括號和表達式起始、結(jié)束符“#”,如:#(7+15)*(23-28/4)#。引入表達式起始、結(jié)束符是為了方便。編程利用“算符優(yōu)先法”求算術(shù)表達式的值。二、程序的主要功能(1)從鍵盤讀入一個合法的算術(shù)表達式,輸出正確的結(jié)果。(2)顯示輸入序列和棧的變化過程。三、程序運行平臺VisualC++6.0版本四、數(shù)據(jù)結(jié)構(gòu)本程序的數(shù)據(jù)結(jié)構(gòu)為棧。(1)運算符棧部分:structSqStack//定義棧{char*base;//棧底指針char*top;//棧頂指針intstacksize;//棧的長度};intInitStack(SqStack&s)//建立一個空棧S{if(!(s.base=(char*)malloc(50*sizeof(char))))exit(0);s.top=s.base;s.stacksize=50;returnOK;}charGetTop(SqStacks,char&e)//運算符取棧頂元素{if(s.top==s.base)//棧為空的時候返回ERROR{ printf("運算符棧為空!\n"); returnERROR;}else e=*(s.top-1);//棧不為空的時候用e做返回值,返回S的棧頂元素,并返回OKreturnOK;}intPush(SqStack&s,chare)//運算符入棧{if(s.top-s.base>=s.stacksize) { printf("運算符棧滿!\n"); s.base=(char*)realloc(s.base,(s.stacksize+5)*sizeof(char));//棧滿的時候,追加5個存儲空間if(!s.base)exit(OVERFLOW); s.top=s.base+s.stacksize;s.stacksize+=5; } *(s.top)++=e;//把e入棧 returnOK;}intPop(SqStack&s,char&e)//運算符出棧{ if(s.top==s.base)//棧為空棧的時候,返回ERROR { printf("運算符棧為空!\n"); returnERROR; }else { e=*--s.top;//棧不為空的時候用e做返回值,刪除S的棧頂元素,并返回OK returnOK; }}intStackTraverse(SqStack&s)//運算符棧的遍歷{ char*t; t=s.base; if(s.top==s.base) { printf("運算符棧為空!\n");//棧為空棧的時候返回ERROR returnERROR; } while(t!=s.top) { printf("%c",*t);//棧不為空的時候依次取出棧內(nèi)元素t++; }returnERROR;}數(shù)字棧部分:structSqStackn//定義數(shù)棧{int*base;//棧底指針int*top;//棧頂指針intstacksize;//棧的長度};intInitStackn(SqStackn&s)//建立一個空棧S{s.base=(int*)malloc(50*sizeof(int));if(!s.base)exit(OVERFLOW);//存儲分配失敗s.top=s.base;s.stacksize=50;returnOK;}intGetTopn(SqStackns,int&e)//數(shù)棧取棧頂元素{if(s.top==s.base){ printf("運算數(shù)棧為空!\n");//棧為空的時候返回ERROR returnERROR;}else e=*(s.top-1);//棧不為空的時候,用e作返回值,返回S的棧頂元素,并返回OKreturnOK;}intPushn(SqStackn&s,inte)//數(shù)棧入棧{if(s.top-s.base>=s.stacksize) { printf("運算數(shù)棧滿!\n");//棧滿的時候,追加5個存儲空間 s.base=(int*)realloc(s.base,(s.stacksize+5)*sizeof(int));if(!s.base)exit(OVERFLOW); s.top=s.base+s.stacksize;//插入元素e為新的棧頂元素s.stacksize+=5; } *(s.top)++=e;//棧頂指針變化 returnOK;}intPopn(SqStackn&s,int&e)//數(shù)棧出棧{ if(s.top==s.base) { printf("運算符棧為空!\n");//棧為空棧的視時候,返回ERROR returnERROR; }else { e=*--s.top;//棧不空的時候,則刪除S的棧頂元素,用e返回其值,并返回OK returnOK; }}intStackTraversen(SqStackn&s)//數(shù)棧遍歷{ int*t; t=s.base; if(s.top==s.base) { printf("運算數(shù)棧為空!\n");//棧為空棧的時候返回ERROR returnERROR; } while(t!=s.top) { printf("%d",*t);//棧不為空的時候依次輸出t++; }returnERROR;}五、算法及時間復(fù)雜度1、算法:建立兩個不同類型的空棧,先把一個‘#’壓入運算符棧。輸入一個算術(shù)表達式的字符串(以‘#’結(jié)束),從第一個字符依次向后讀,把讀取的數(shù)字放入數(shù)字棧,運算符放入運算符棧。判斷新讀取的運算符和運算符棧頂?shù)眠\算符號的優(yōu)先級,以便確定是運算還是把運算符壓入運算符棧。最后兩個‘#’遇到一起則運算結(jié)束。數(shù)字棧頂?shù)臄?shù)字就是要求的結(jié)果。2、時間復(fù)雜度:O(n)數(shù)據(jù)壓縮存儲棧,其操作主要有:建立棧intPush(SeqStack*S,charx)入棧intPop(SeqStack*S,charx)出棧。以上各操作運算的平均時間復(fù)雜度為O(n),其主要時間是耗費在輸入操作。測試用例如圖所示。最終結(jié)果如圖所示:源代碼/**************************************************************************************************第七題算術(shù)表達式求值[問題描述]一個算術(shù)表達式是由操作數(shù)(operand)、運算符(operator)和界限符(delimiter)組成的。假設(shè)操作數(shù)是正整數(shù),運算符只含加減乘除等四種運算符,界限符有左右括號和表達式起始、結(jié)束符“#”,如:#(7+15)*(23-28/4)#。引入表達式起始、結(jié)束符是為了方便。編程利用“算符優(yōu)先法”求算術(shù)表達式的值。[基本要求](1)從鍵盤讀入一個合法的算術(shù)表達式,輸出正確的結(jié)果。(2)顯示輸入序列和棧的變化過程。***************************************************************************************************/#include<stdio.h>#include<string.h>#include<stdlib.h>#include<math.h>#include<conio.h>#include<ctype.h>#defineOK1#defineERROR0#defineSTACK_INIT_SIZE100//#defineSTACKINCREMENT10//========================================================//以下定義兩種棧,分別存放運算符和數(shù)字//========================================================//*******************運算符棧部分*************************structSqStack//定義棧{char*base;//棧底指針char*top;//棧頂指針intstacksize;//棧的長度};intInitStack(SqStack&s)//建立一個空棧S{if(!(s.base=(char*)malloc(50*sizeof(char))))exit(0);s.top=s.base;s.stacksize=50;returnOK;}charGetTop(SqStacks,char&e)//運算符取棧頂元素{if(s.top==s.base)//棧為空的時候返回ERROR{ printf("運算符棧為空!\n"); returnERROR;}else e=*(s.top-1);//棧不為空的時候用e做返回值,返回S的棧頂元素,并返回OKreturnOK;}intPush(SqStack&s,chare)//運算符入棧{if(s.top-s.base>=s.stacksize) { printf("運算符棧滿!\n"); s.base=(char*)realloc(s.base,(s.stacksize+5)*sizeof(char));//棧滿的時候,追加5個存儲空間if(!s.base)exit(OVERFLOW); s.top=s.base+s.stacksize;s.stacksize+=5; } *(s.top)++=e;//把e入棧 returnOK;}intPop(SqStack&s,char&e)//運算符出棧{ if(s.top==s.base)//棧為空棧的時候,返回ERROR { printf("運算符棧為空!\n"); returnERROR; }else { e=*--s.top;//棧不為空的時候用e做返回值,刪除S的棧頂元素,并返回OK returnOK; }}intStackTraverse(SqStack&s)//運算符棧的遍歷{ char*t; t=s.base; if(s.top==s.base) { printf("運算符棧為空!\n");//棧為空棧的時候返回ERROR returnERROR; } while(t!=s.top) { printf("%c",*t);//棧不為空的時候依次取出棧內(nèi)元素t++; }returnERROR;}//**********************數(shù)字棧部分***************************structSqStackn//定義數(shù)棧{int*base;//棧底指針int*top;//棧頂指針intstacksize;//棧的長度};intInitStackn(SqStackn&s)//建立一個空棧S{s.base=(int*)malloc(50*sizeof(int));if(!s.base)exit(OVERFLOW);//存儲分配失敗s.top=s.base;s.stacksize=50;returnOK;}intGetTopn(SqStackns,int&e)//數(shù)棧取棧頂元素{if(s.top==s.base){ printf("運算數(shù)棧為空!\n");//棧為空的時候返回ERROR returnERROR;}elsee=*(s.top-1);//棧不為空的時候,用e作返回值,返回S的棧頂元素,并返回OKreturnOK;}intPushn(SqStackn&s,inte)//數(shù)棧入棧{if(s.top-s.base>=s.stacksize) { printf("運算數(shù)棧滿!\n");//棧滿的時候,追加5個存儲空間 s.base=(int*)realloc(s.base,(s.stacksize+5)*sizeof(int));if(!s.base)exit(OVERFLOW); s.top=s.base+s.stacksize;//插入元素e為新的棧頂元素s.stacksize+=5; } *(s.top)++=e;//棧頂指針變化 returnOK;}intPopn(SqStackn&s,int&e)//數(shù)棧出棧{ if(s.top==s.base) { printf("運算符棧為空!\n");//棧為空棧的視時候,返回ERROR returnERROR; }else { e=*--s.top;//棧不空的時候,則刪除S的棧頂元素,用e返回其值,并返回OK returnOK; }}intStackTraversen(SqStackn&s)//數(shù)棧遍歷{ int*t; t=s.base; if(s.top==s.base) { printf("運算數(shù)棧為空!\n");//棧為空棧的時候返回ERROR returnERROR; } while(t!=s.top) { printf("%d",*t);//棧不為空的時候依次輸出t++; }returnERROR;}//========================================================//以下定義函數(shù)//========================================================intIsoperator(charch)//判斷是否為運算符,分別將運算符和數(shù)字進入不同的棧{ switch(ch) { case'+': case'-': case'*': case'/': case'(': case')': case'#': return1; default: return0; }}intOperate(inta,charop,intb)//運算操作{ intresult; switch(op) { case'+': result=a+b; break; case'-': result=a-b; break; case'*': result=a*b; break; case'/': result=a/b; break; } returnresult;}charPrecede(charch1,charch2)//運算符優(yōu)先級的比較{charp;switch(ch1){case'+':case'-': if(ch2=='+'||ch2=='-'||ch2==')'||ch2=='#')p='>';//ch1運算符的優(yōu)先級小于ch2運算符 elsep='<'; break;case'*':case'/': if(ch2=='(')p='<'; elsep='>'; break;case'(': if(ch2==')') p='='; elseif(ch2=='#') { printf("表達式錯誤!運算符不匹配!\n"); exit(0); } else p='<'; break; case')': if(ch2=='(') { printf("表達式錯誤!運算符不匹配!\n"); exit(0); } else p='>'; break;case'#': if(ch2==')'){ printf("表達式錯誤!運算符不匹配!\n"); exit(0); } elseif(ch2=='#') p='='; else p='<'; break;}returnp;}//========================================================//以下是求值過程//========================================================intEvaluateExpression()//參考書p53算法3.4{ inta,b,temp,answer;charch,op,e;char*str;intj=0;SqStacknOPND;//OPND為運算數(shù)字棧SqStackOPTR;//OPTR為運算符棧InitStack(OPTR);Push(OPTR,'#');//,所以此棧底是'#',因為運算符棧以'#'作為結(jié)束標志InitStackn(OPND);//printf("\n\n按任意鍵開始求解:\n\n");//ch=getch();printf("\n請輸入表達式并以'#'結(jié)束:\n");str=(char*)malloc(50*sizeof(char));gets(str);ch=str[j];//ch是字符型的,而e是整型的整數(shù)j++;GetTop(OPTR,e);//e為棧頂元素返回值while(ch!='#'||e!='#'){ if(!Isoperator(ch))//遇到數(shù)字,轉(zhuǎn)換成十進制并計算 { temp=ch-'0';//將字符轉(zhuǎn)換為十進制數(shù) ch=str[j]; j++; while(!Isoperator(ch)) { temp=temp*10+ch-'0';//將逐個讀入運算數(shù)的各位轉(zhuǎn)化為十進制數(shù) ch=str[j]; j++; } Pushn(OPND,temp); } elseif(Isoperator(ch))//判斷是否是運算符,不是運算符則進棧 switch(Precede(e,ch)){case'<':Push(OPTR,ch);//棧頂元素優(yōu)先權(quán)低 ch=str[j++]; printf("\n\n運算符棧為:\n");//輸出棧,顯示棧的變化 StackTraverse(OPTR); printf("\n運算數(shù)棧為:\n"); StackTraversen(OPND); break; case'=':Pop(OPTR,op);//脫括號并接收下一字符 ch=str[j++]; printf("\n\n運算符棧為:\n"); StackTraverse(OPTR); printf("\n數(shù)棧為:\n"); StackTraversen(OPND); break; case'>':Pop(OPTR,op);//彈出最上面兩個,并運算,把結(jié)果進棧 Popn(OPND,b); Popn(OPND,a); Pushn(OPND,Operate(a,op,b)); printf("\n\n運算符棧為:\n"); StackTraverse(OPTR); printf("\n數(shù)棧為:\n"); StackTraversen(OPND);}else {printf("您的輸入有問題,請檢查重新輸入!"); exit(0); } GetTop(OPTR,e);//取出運算符棧最上面元素是否是'#'}//whileGetTopn(OPND,answer);//已輸出。數(shù)字棧最上面即是最終結(jié)果returnanswer;}//========================================================//執(zhí)行部分//========================================================voidShowMenu(){ printf("\n\n"); printf("███████████████████████████████████████\n"); printf("████\n"); printf("██表達式求值系統(tǒng)██\n"); printf("████\n"); printf("███████████████████████████████████████\n");}voidQuit();voidManage(){ intanswer;// ShowMenu(); answer=EvaluateExpression(); printf("\n\n表達式結(jié)果是:%d\n",answer); Quit();}voidQuit(){ charch;printf("本次運算結(jié)束。\n");printf("繼續(xù)本系統(tǒng)嗎?\n\n"); printf("繼續(xù)運算請按Y/y"); printf("\n退出程序請按N/n"); printf("\n___________________________________________________________________\n"); ch=getch(); ch=toupper(ch);//將ch字符轉(zhuǎn)換成大寫字母 if(ch=='N') { printf("\n\n系統(tǒng)退出。\n"); exit(0); } Manage();}intmain(){ ShowMenu();Manage(); return0;}感想體會與總結(jié)好的算法+編程技巧+高效率=好的程序。做什么都需要耐心,做設(shè)計寫程序更需要耐心。一開始的時候,我寫函數(shù)寫的很快,可是等最后調(diào)試的時候發(fā)現(xiàn)錯誤很隱蔽,就很費時間了。后來我先在紙上構(gòu)思出函數(shù)的功能和參數(shù),考慮好接口之后才動手編,這樣就比較容易成功了。做任何事情我決定都應(yīng)該有個總體規(guī)劃。之后的工作按照規(guī)劃逐步展開完成。對于一個完整的程序設(shè)計,首先需要總體規(guī)劃寫程序的步驟,分塊寫分函數(shù)寫,然后寫完一部分馬上糾錯調(diào)試。而不是像我第一個程序,一口氣寫完,然后再花幾倍的時間調(diào)試。一步步來,走好一步再走下一步。寫程序是這樣,做項目是這樣,過我們的生活更是應(yīng)該這樣。感覺一開始設(shè)計結(jié)構(gòu)寫函數(shù)體現(xiàn)的是數(shù)據(jù)結(jié)構(gòu)的思想,后面的調(diào)試則更加體現(xiàn)了人的綜合素質(zhì),專業(yè)知識、堅定耐心、鍥而不舍,真的缺一不可啊。通過這次課設(shè),不僅僅復(fù)習(xí)了C語言相關(guān)知識、鞏固了數(shù)據(jù)結(jié)構(gòu)關(guān)于棧和排序的算法等知識,更磨練了我的意志。PHP正則表達式的快速學(xué)習(xí)方法1、入門簡介簡單的說,正則表達式是一種可以用于模式匹配和替換的強有力的工具。我們可以在幾乎所有的基于UNIX系統(tǒng)的工具中找到正則表達式的身影,例如,vi編輯器,Perl或PHP腳本語言,以及awk或sedshell程序等。此外,象JavaScript這種客戶端的腳本語言也提供了對正則表達式的支持。由此可見,正則表達式已經(jīng)超出了某種語言或某個系統(tǒng)的局限,成為人們廣為接受的概念和功能。正則表達式可以讓用戶通過使用一系列的特殊字符構(gòu)建匹配模式,然后把匹配模式與數(shù)據(jù)文件、程序輸入以及WEB頁面的表單輸入等目標對象進行比較,根據(jù)比較對象中是否包含匹配模式,執(zhí)行相應(yīng)的程序。舉例來說,正則表達式的一個最為普遍的應(yīng)用就是用于驗證用戶在線輸入的郵件地址的格式是否正確。如果通過正則表達式驗證用戶郵件地址的格式正確,用戶所填寫的表單信息將會被正常處理;反之,如果用戶輸入的郵件地址與正則表達的模式不匹配,將會彈出提示信息,要求用戶重新輸入正確的郵件地址。由此可見正則表達式在WEB應(yīng)用的邏輯判斷中具有舉足輕重的作用。2、基本語法在對正則表達式的功能和作用有了初步的了解之后,我們就來具體看一下正則表達式的語法格式。(1)正則表達式的形式一般如下:/love/其中位于“/”定界符之間的部分就是將要在目標對象中進行匹配的模式。用戶只要把希望查找匹配對象的模式內(nèi)容放入“/”定界符之間即可。(2)為了能夠使用戶更加靈活的定制模式內(nèi)容,正則表達式提供了專門的“元字符”。所謂元字符就是指那些在正則表達式中具有特殊意義的專用字符,可以用來規(guī)定其前導(dǎo)字符(即位于元字符前面的字符)在目標對象中的出現(xiàn)模式。較為常用的元字符包括:“+”,“*”,以及“?”。其中,“+”元字符規(guī)定其前導(dǎo)字符必須在目標對象中連續(xù)出現(xiàn)一次或多次,“*”元字符規(guī)定其前導(dǎo)字符必須在目標對象中出現(xiàn)零次或連續(xù)多次,而“?”元字符規(guī)定其前導(dǎo)對象必須在目標對象中連續(xù)出現(xiàn)零次或一次。下面,就讓我們來看一下正則表達式元字符的具體應(yīng)用。
/fo+/因為上述正則表達式中包含“+”元字符,表示可以與目標對象中的“fool”,“fo”,或者“football”等在字母f后面連續(xù)出現(xiàn)一個或多個字母o的字符串相匹配。
/eg*/因為上述正則表達式中包含“*”元字符,表示可以與目標對象中的“easy”,“ego”,或者“egg”等在字母e后面連續(xù)出現(xiàn)零個或多個字母g的字符串相匹配。
/Wil?/因為上述正則表達式中包含“?”元字符,表示可以與目標對象中的“Win”,或者“Wilson”,等在字母i后面連續(xù)出現(xiàn)零個或一個字母l的字符串相匹配。除了元字符之外,用戶還可以精確指定模式在匹配對象中出現(xiàn)的頻率。例如,
/jim{2,6}/上述正則表達式規(guī)定字符m可以在匹配對象中連續(xù)出現(xiàn)2-6次,因此,上述正則表達式可以同jimmy或jimmmmmy等字符串相匹配。在對如何使用正則表達式有了初步了解之后,我們來看一下其它幾個重要的元字符的使用方式。\s:用于匹配單個空格符,包括tab鍵和換行符;\S:用于匹配除單個空格符之外的所有字符;\d:用于匹配從0到9的數(shù)字;\w:用于匹配字母,數(shù)字或下劃線字符;\W:用于匹配所有與\w不匹配的字符;.:用于匹配除換行符之外的所有字符。(說明:我們可以把\s和\S以及\w和\W看作互為逆運算)下面,我們就通過實例看一下如何在正則表達式中使用上述元字符。
/\s+/上述正則表達式可以用于匹配目標對象中的一個或多個空格字符。
/\d000/如果我們手中有一份復(fù)雜的財務(wù)報表,那么我們可以通過上述正則表達式輕而易舉的查找到所有總額達千元的款項。(3)除了我們以上所介紹的元字符之外,正則表達式中還具有另外一種較為獨特的專用字符,即定位符。定位符用于規(guī)定匹配模式在目標對象中的出現(xiàn)位置。較為常用的定位符包括:“^”,“$”,“\b”以及“\B”。其中,“^”定位符規(guī)定匹配模式必須出現(xiàn)在目標字符串的開頭,“$”定位符規(guī)定匹配模式必須出現(xiàn)在目標對象的結(jié)尾,\b定位符規(guī)定匹配模式必須出現(xiàn)在目標字符串的開頭或結(jié)尾的兩個邊界之一,而“\B”定位符則規(guī)定匹配對象必須位于目標字符串的開頭和結(jié)尾兩個邊界之內(nèi),即匹配對象既不能作為目標字符串的開頭,也不能作為目標字符串的結(jié)尾。同樣,我們也可以把“^”和“$”以及“\b”和“\B”看作是互為逆運算的兩組定位符。舉例來說:
/^hell/因為上述正則表達式中包含“^”定位符,所以可以與目標對象中以“hell”,“hello”或“hellhound”開頭的字符串相匹配。
/ar$/因為上述正則表達式中包含“$”定位符,所以可以與目標對象中以“car”,“bar”或“ar”結(jié)尾的字符串相匹配。/\bbom/因為上述正則表達式模式以“\b”定位符開頭,所以可以與目標對象中以“bomb”,或“bom”開頭的字符串相匹配。
/man\b/因為上述正則表達式模式以“\b”定位符結(jié)尾,所以可以與目標對象中以“human”,“woman”或“man”結(jié)尾的字符串相匹配。(4)為了能夠方便用戶更加靈活的設(shè)定匹配模式,正則表達式允許使用者在匹配模式中指定某一個范圍而不局限于具體的字符。例如:
/[A-Z]/上述正則表達式將會與從A到Z范圍內(nèi)任何一個大寫字母相匹配。
/[a-z]/上述正則表達式將會與從a到z范圍內(nèi)任何一個小寫字母相匹配。
/[0-9]/上述正則表達式將會與從0到9范圍內(nèi)任何一個數(shù)字相匹配。
/([a-z][A-Z][0-9])+/上述正則表達式將會與任何由字母和數(shù)字組成的字符串,如“aB0”等相匹配。這里需要提醒用戶注意的一點就是可以在正則表達式中使用“()”把字符串組合在一起?!?)”符號包含的內(nèi)容必須同時出現(xiàn)在目標對象中。因此,上述正則表達式將無法與諸如“abc”等的字符串匹配,因為“abc”中的最后一個字符為字母而非數(shù)字。(5)如果我們希望在正則表達式中實現(xiàn)類似編程邏輯中的“或”運算,在多個不同的模式中任選一個進行匹配的話,可以使用管道符“|”。例如:
/to|too|2/上述正則表達式將會與目標對象中的“to”,“too”,或“2”相匹配。(6)正則表達式中還有一個較為常用的運算符,即否定符“[^]”。與我們前文所介紹的定位符“^”不同,否定符“[^]”規(guī)定目標對象中不能存在模式中所規(guī)定的字符串。例如:
/[^A-C]/上述字符串將會與目標對象中除A,B,和C之外的任何字符相匹配。一般來說,當(dāng)“^”出現(xiàn)在“[]”內(nèi)時就被視做否定運算符;而當(dāng)“^”位于“[]”之外,或沒有“[]”時,則應(yīng)當(dāng)被視做定位符。(7)最后,當(dāng)用戶需要在正則表達式的模式中加入元字符,并查找其匹配對象時,可以使用轉(zhuǎn)義符“\”。例如:
/Th\*/上述正則表達式將會與目標對象中的“Th*”而非“The”等相匹配。3、使用實例①PHP中可以使用ereg()函數(shù)進行模式匹配操作。ereg()函數(shù)的使用格式如下:以下為引用的內(nèi)容:ereg(pattern,string)其中,pattern代表正則表達式的模式,而string則是執(zhí)行查找替換操作的目標對象。同樣是驗證郵件地址,使用PHP編寫的程序代碼如下:<?php
if(ereg(“^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+”,$email)){
echo“Youremailaddressiscorrect!”;}
else{
echo“Pleasetryagain!”;
}
?>②JavaScript1.2中帶有一個功能強大的RegExp()對象,可以用來進行正則表達式的匹配操作。其中的test()方法可以檢驗?zāi)繕藢ο笾惺欠癜ヅ淠J?,并相?yīng)的返回true或false。我們可以使用JavaScript編寫以下腳本,驗證用戶輸入的郵件地址的有效性。以下為引用的內(nèi)容:<html>
<head>
<scriptlanguage=\"Javascript1.2\">
<!--starthiding
functionverifyAddress(obj)
{
varemail=obj.email.value;
varpattern=/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/;
flag=pattern.test(email);
if(flag)
{
alert(“Youremailaddressiscorrect!”);
returntrue;
}
else
{
alert(“Pleasetryagain!”);
returnfalse;
}
}
//stophiding-->
</script>
</head>
<body>
<formonSubmit=\"returnverifyAddress(this);\">
<inputname=\"email\"type=\"text\"/>
<inputtype=\"submit\"/>
</form>
</body>
</html>想必很多人都對正則表達式都頭疼。今天,我以我的認識,加上網(wǎng)上一些文章,希望用常人都可以理解的表達方式。來和大家分享學(xué)習(xí)經(jīng)驗。開篇,還是得說說^和$他們是分別用來匹配字符串的開始和結(jié)束,以下分別舉例說明:“^The”:開頭一定要有”The”字符串;
“ofdespair$”:結(jié)尾一定要有”ofdespair”的字符串;那么,“^abc$”:就是要求以abc開頭和以abc結(jié)尾的字符串,實際上是只有abc匹配;
“notice”:匹配包含notice的字符串;你可以看見如果你沒有用我們提到的兩個字符(最后一個例子),就是說模式(正則表達式)可以出現(xiàn)在被檢驗字符串的任何地方,你沒有把他鎖定到兩邊。接著,說說‘*’‘+’和‘?’他們用來表示一個字符可以出現(xiàn)的次數(shù)或者順序,他們分別表示:
“zeroormore”相當(dāng)于{0,}
“oneormore”相當(dāng)于{1,}
“zeroorone.”相當(dāng)于{0,1}這里是一些例子:“ab*”:和ab{0,}同義,匹配以a開頭,后面可以接0個或者N個b組成的字符串(”a”,“ab”,“abbb”,等);
“ab+”:和ab{1,}同義,同上條一樣,但最少要有一個b存在(”ab”“abbb”等);
“ab?”:和ab{0,1}同義,可以沒有或者只有一個b;
“a?b+$”:匹配以一個或者0個a再加上一個以上的b結(jié)尾的字符串。要點:’*’‘+’和‘?’只管它前面那個字符。你也可以在大括號里面限制字符出現(xiàn)的個數(shù),比如:“ab{2}”:要求a后面一定要跟兩個b(一個也不能少)(”abb”);“ab{2,}”:要求a后面一定要有兩個或者兩個以上b(如”abb”“abbbb”等);“ab{3,5}”:要求a后面可以有3-5個b(”abbb”,“abbbb”,or“abbbbb”)?,F(xiàn)在我們把一定幾個字符放到小括號里,比如:“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的字符串;一個點(’.’)可以代表所有的單一字符,不包括”\n”如果,要匹配包括”\n”在內(nèi)的所有單個字符,怎么辦?用’[\n.]’這種模式?!癮.[0-9]”:一個a加一個字符再加一個0到9的數(shù)字;
“^.{3}$”:三個任意字符結(jié)尾。中括號括住的內(nèi)容只匹配一個單一的字符“[ab]”:匹配單個的a或者b(和“a│b”一樣);
“[a-d]”:匹配’a’到’d’的單個字符(和”a│b│c│d”還有“[abcd]”效果一樣);一般我們都用[a-zA-Z]來指定字符為一個大小寫英文:“^[a-zA-Z]”:匹配以大小寫字母開頭的字符串;
“[0-9]%”:匹配含有形如x%的字符串;
“,[a-zA-Z0-9]$”:匹配以逗號再加一個數(shù)字或字母結(jié)尾的字符串;你也可以把你不想要得字符列在中括號里,你只需要在總括號里面使用’^’作為開頭“%[^a-zA-Z]%”匹配含有兩個百分號里面有一個非字母的字符串。要點:^用在中括號開頭的時候,就表示排除括號里的字符。為了PHP能夠解釋,你必須在這些字符面前后加”,并且將一些字符轉(zhuǎn)義。不要忘記在中括號里面的字符是這條規(guī)路的例外—在中括號里面,所有的特殊字符,包括(”),都將失去他們的特殊性質(zhì)“[*\+?{}.]”匹配含有這些字符的字符串:還有,正如regx的手冊告訴我們:”如果列表里含有’]’,最好把它作為列表里的第一個字符(可能跟在’^’后面)。如果含有’-’,最好把它放在最前面或者最后面,or或者一個范圍的第二個結(jié)束點[a-d-0-9]中間的‘-’將有效??戳松厦娴睦?,你對{n,m}應(yīng)該理解了吧。要注意的是,n和m都不能為負整數(shù),而且n總是小于m。這樣,才能最少匹配n次且最多匹配m次。如”p{1,5}”將匹配“pvpppppp”中的前五個p下面說說以\開頭的\b書上說他是用來匹配一個單詞邊界,就是…比如’ve\b’,可以匹配love里的ve而不匹配very里有ve\B正好和上面的\b相反。例子我就不舉了…..突然想起來….可以到:///article.php/251看看其它用\開頭的語法好,我們來做個應(yīng)用:如何構(gòu)建一個模式來匹配貨幣數(shù)量的輸入。構(gòu)建一個匹配模式去檢查輸入的信息是否為一個表示money的數(shù)字。我們認為一個表示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ù)字與之匹配”,我們也可以允許一個負號在數(shù)字之前:^(0|-?[1-9][0-9]*)$這就是:0或者一個以0開頭且可能有一個負號在前面的數(shù)字。好了,現(xiàn)在讓我們別那么嚴謹,允許以0開頭?,F(xiàn)在讓我們放棄負號,因為我們在表示錢幣的時候并不需要用到。我們現(xiàn)在指定模式用來匹配小數(shù)部分:^[0-9]+(\.[0-9]+)?$這暗示匹配的字符串必須最少以一個阿拉伯?dāng)?shù)字開頭。但是注意,在上面模式中“10.”是不匹配的,只有“10″和“10.2″才可以,你知道為什么嗎?^[0-9]+(\.[0-9]{2})?$我們上面指定小數(shù)點后面必須有兩位小數(shù)。如果你認為這樣太苛刻,你可以改成:^[0-9]+(\.[0-9]{1,2})?$這將允許小數(shù)點后面有一到兩個字符?,F(xiàn)在我們加上用來增加可讀性的逗號(每隔三位),我們可以這樣表示:^[0-9]{1,3}(,[0-9]{3})*(\.[0-9]{1,2})?$不要忘記’+’可以被’*’替代如果你想允許空白字符串被輸入話,也不要忘記反斜桿’\’在php字符串中可能會出現(xiàn)錯誤(很普遍的錯誤):現(xiàn)在,我們已經(jīng)可以確認字符串了,我們現(xiàn)在把所有逗號都去掉str_replace(”,”,“”,$money)然后在把類型看成double然后我們就可以通過他做數(shù)學(xué)計算了。再來一個:構(gòu)造檢查email的正則表達式在一個完整的email地址中有三個部分:1.用戶名(在‘@’左邊的一切)
2.’@’
3.服務(wù)器名(就是剩下那部分)用戶名可以含有大小寫字母阿拉伯?dāng)?shù)字,句號(’.’)減號(’-’)and下劃線’_’)。服務(wù)器名字也是符合這個規(guī)則,當(dāng)然下劃線除外?,F(xiàn)在,用戶名的開始和結(jié)束都不能是句點,服務(wù)器也是這樣。還有你不能有兩個連續(xù)的句點他們之間至少存在一個字符,好現(xiàn)在我們來看一下怎么為用戶名寫一個匹配模式:^[_a-zA-Z0-9-]+$現(xiàn)在還不能允許句號的存在。我們把它加上:^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*$上面的意思就是說:以至少一個規(guī)范字符(除了.)開頭,后面跟著0個或者多個以點開始的字符串。簡單化一點,我們可以用eregi()取代ereg()、eregi()對大小寫不敏感,我們就不需要指定兩個范圍“a-z”和“A-Z”只需要指定一個就可以了:^[_a-z0-9-]+(\.[_a-z0-9-]+)*$后面的服務(wù)器名字也是一樣,但要去掉下劃線:^[a-z0-9-]+(\.[a-z0-9-]+)*$好?,F(xiàn)在只需要用”@”把兩部分連接:^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$這就是完整的email認證匹配模式了,只需要調(diào)用:eregi(”^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$”,$eamil)就可以得到是否為email了正則表達式的其他用法提取字符串ereg()anderegi()有一個特性是允許用戶通過正則表達式去提取字符串的一部分(具體用法你可以閱讀手冊)。比如說,我們想從path/URL提取文件名,下面的代碼就是你需要:ereg(”([^\\/]*)$”,$pathOrUrl,$regs);
echo$regs[1];高級的代換ereg_replace()和eregi_replace()也是非常有用的,假如我們想把所有的間隔負號都替換成逗號:ereg_replace(”[\n\r\t]+”,“,”,trim($str));最后,我把另一串檢查EMAIL的正則表達式讓看文章的你來分析一下:“^[-!#$%&\’*+\\./0-9=?A-Z^_`a-z{|}~]+’.’@’.’[-!#$%&\’*+\\/0-9=?A-Z^_`a-z{|}~]+\.’.’[-!#$%&\’*+\\./0-9=?A-Z^_`a-z{|}~]+$”如果能方便的讀懂,那這篇文章的目的就達到了。PHP常用正則表達式大全(含中文)
"^\d+$"http://非負整數(shù)(正整數(shù)
+
0)
"^[0-9]*[1-9][0-9]*$"http://正整數(shù)
"^((-\d+)|(0+))$"http://非正整數(shù)(負整數(shù)
+
0)
"^-[0-9]*[1-9][0-9]*$"http://負整數(shù)
"^-?\d+$"http://整數(shù)
"^\d+(\.\d+)?$"http://非負浮點數(shù)(正浮點數(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://正浮點數(shù)
"^((-\d+(\.\d+)?)|(0+(\.0+)?))$"http://非正浮點數(shù)(負浮點數(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://負浮點數(shù)
"^(-?\d+)(\.\d+)?$"http://浮點數(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})(]?)$"
//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])$"
//IP地址匹配中文字符的正則表達式:
[\一-\龥]匹配雙字節(jié)字符(包括漢字在內(nèi)):[^\x00-\xff]匹配空行的正則表達式:\n[\s|
]*\r匹配HTML標記的正則表達式:/<(.*)>.*<\/\1>|<(.*)
\/>/匹配首尾空格的正則表達式:(^\s*)|(\s*$)匹配Email地址的正則表達式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*匹配網(wǎng)址URL的正則表達式:^[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]*$元字符及其在正則表達式上下文中的行為:
\
將下一個字符標記為一個特殊字符、或一個原義字符、或一個后向引用、或一個八進制轉(zhuǎn)義符。
^
匹配輸入字符串的開始位置。如果設(shè)置了
RegExp
對象的Multiline
屬性,^
也匹配
’\n’
或
’\r’
之后的位置。
$
匹配輸入字符串的結(jié)束位置。如果設(shè)置了
RegExp
對象的Multiline
屬性,$
也匹配
’\n’
或
’\r’
之前的位置。
*
匹配前面的子表達式零次或多次。
+
匹配前面的子表達式一次或多次。+
等價于
{1,}。
?
匹配前面的子表達式零次或一次。?
等價于
{0,1}。
{n}
n
是一個非負整數(shù),匹配確定的n
次。
{n,}
n
是一個非負整數(shù),至少匹配n
次。
{n,m}
m
和
n
均為非負整數(shù),其中n
<=
m。最少匹配
n
次且最多匹配
m
次。在逗號和兩個數(shù)之間不能有空格。?
當(dāng)該字符緊跟在任何一個其他限制符
(*,
+,
?,
{n},
{n,},
{n,m})
后面時,匹配模式是非貪婪的。非貪婪模式盡可能少的匹配所搜索的字符串,而默認的貪婪模式則盡可能多的匹配所搜索的字符串。
.
匹配除
"\n"
之外的任何單個字符。要匹配包括
’\n’
在內(nèi)的任何字符,請使用象
’[.\n]’
的模式。
(pattern)
匹配pattern
并獲取這一匹配。
(?:pattern)
匹配pattern
但不獲取匹配結(jié)果,也就是說這是一個非獲取匹配,不進行存儲供以后使用。
(?=pattern)
正向預(yù)查,在任何匹配
pattern
的字符串開始處匹配查找字符串。這是一個非獲取匹配,也就是說,該匹配不需要獲取供以后使用。
(?!pattern)
負向預(yù)查,與(?=pattern)作用相反
x|y
匹配
x
或
y。
[xyz]
字符集合。
[^xyz]
負值字符集合。
[a-z]
字符范圍,匹配指定范圍內(nèi)的任意字符。
[^a-z]
負值字符范圍,匹配任何不在指定范圍內(nèi)的任意字符。
\b
匹配一個單詞邊界,也就是指單詞和空格間的位置。
\B
匹配非單詞邊界。
\cx
匹配由x指明的控制字符。
\d
匹配一個數(shù)字字符。等價于
[0-9]。
\D
匹配一個非數(shù)字字符。等價于
[^0-9]。
\f
匹配一個換頁符。等價于
\x0c
和
\cL。
\n
匹配一個換行符。等價于
\x0a
和
\cJ。
\r
匹配一個回車符。等價于
\x0d
和
\cM。
\s
匹配任何空白字符,包括空格、制表符、換頁符等等。等價于[
\f\n\r\t\v]。
\S
匹配任何非空白字符。等價于
[^
\f\n\r\t\v]。
\t
匹配一個制表符。等價于
\x09
和
\cI。
\v
匹配一個垂直制表符。等價于
\x0b
和
\cK。
\w
匹配包括下劃線的任何單詞字符。等價于’[A-Za-z0-9_]’。
\W
匹配任何非單詞字符。等價于
’[^A-Za-z0-9_]’。
\xn
匹配
n,其中
n
為十六進制轉(zhuǎn)義值。十六進制轉(zhuǎn)義值必須為確定的兩個數(shù)字長。
\num
匹配
num,其中num是一個正整數(shù)。對所獲取的匹配的引用。
\n
標識一個八進制轉(zhuǎn)義值或一個后向引用。如果
\n
之前至少
n
個獲取的子表達式,則
n
為后向引用。否則,如果
n
為八進制數(shù)字
(0-7),則
n
為一個八進制轉(zhuǎn)義值。
\nm
標識一個八進制轉(zhuǎn)義值或一個后向引用。如果
\nm
之前至少有is
preceded
by
at
least
nm
個獲取得子表達式,則
nm
為后向引用。如果
\nm
之前至少有
n
個獲取,則
n
為一個后跟文字
m
的后向引用。如果前面的條件都不滿足,若
n
和
m
均為八進制數(shù)字
(0-7),則
\nm
將匹配八進制轉(zhuǎn)義值
nm。
\nml
如果
n
為八進制數(shù)字
(0-3),且
m
和
l
均為八進制數(shù)字
(0-7),則匹配八進制轉(zhuǎn)義值
nml。
\un
匹配
n,其中
n
是一個用四個十六進制數(shù)字表示的Unicode字符。匹配中文字符的正則表達式:
[一-龥]匹配雙字節(jié)字符(包括漢字在內(nèi)):[^x00-xff]匹配空行的正則表達式:n[s|
]*r匹配HTML標記的正則表達式:/<(.*)>.*</1>|<(.*)
/>/
匹配首尾空格的正則表達式:(^s*)|(s*$)匹配Email地址的正則表達式:w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*匹配網(wǎng)址URL的正則表達式:://([w-]+.)+[w-]+(/[w-
./?%&=]*)?利用正則表達式限制網(wǎng)頁表單里的文本框輸入內(nèi)容:用
正則表達式限制只能輸入中文:onkeyup="val=val.replace(/[^一-龥]/g,'')"
onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^一-龥]/g,''))"用
正則表達式限制只能輸入全角字符:
onkeyup="val=val.replace(/[^?-?]/g,'')"
onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^?-?]/g,''))"用
正則表達式限制只能輸入數(shù)字:onkeyup="val=val.replace(/[^d]/g,'')
"onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^d]/g,''))"用
正則表達式限制只能輸入數(shù)字和英文:onkeyup="val=val.replace(/[W]/g,'')
"onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^d]/g,''))"
=========常用正則式匹配中文字符的正則表達式:
[\一-\龥]匹配雙字節(jié)字符(包括漢字在內(nèi)):[^\x00-\xff]匹配空行的正則表達式:\n[\s|
]*\r匹配HTML標記的正則表達式:/<(.*)>.*<\/\1>|<(.*)
\/>/
匹配首尾空格的正則表達式:(^\s*)|(\s*$)匹配IP地址的正則表達式:/(\d+)\.(\d+)\.(\d+)\.(\d+)/g
//匹配Email地址的正則表達式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*匹配網(wǎng)址URL的正則表達式:://(/[\w-]+\.)+[\w-]+(/[\w-
./?%&=]*)?
sql語句:^(select|drop|delete|create|update|insert).*$
1、非負整數(shù):^\d+$
2、正整數(shù):^[0-9]*[1-9][0-9]*$
3、非正整數(shù):^((-\d+)|(0+))$
4、負整數(shù):^-[0-9]*[1-9][0-9]*$
5、整數(shù):^-?\d+$
6、非負浮點數(shù):^\d+(\.\d+)?$
7、正浮點數(shù):^((0-9)+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$
8、非正浮點數(shù):^((-\d+\.\d+)?)|(0+(\.0+)?))$
9、負浮點數(shù):^(-((正浮點數(shù)正則式)))$
10、英文字符串:^[A-Za-z]+$
11、英文大寫串:^[A-Z]+$
12、英文小寫串:^[a-z]+$
13、英文字符數(shù)字串:^[A-Za-z0-9]+$
14、英數(shù)字加下劃線串:^\w+$
15、E-mail地址:^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$
16、URL:^[a-zA-Z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\s*)?$
或:^:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$
17、郵政編碼:^[1-9]\d{5}$
18、中文:^[\Α-\¥]+$
19、號碼:^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$
20、號碼:^((\(\d{2,3}\))|(\d{3}\-))?13\d{9}$
21、雙字節(jié)字符(包括漢字在內(nèi)):^\x00-\xff
22、匹配首尾空格:(^\s*)|(\s*$)(像vbscript那樣的trim函數(shù))
23、匹配HTML標記:<(.*)>.*<\/\1>|<(.*)
\/>
24、匹配空行:\n[\s|
]*\r
25、提取信息中的網(wǎng)絡(luò)鏈接:(h|H)(r|R)(e|E)(f|F)
*=
*('|")?(\w|\\|\/|\.)+('|"|
*|>)?
26、提取信息中的郵件地址:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*27、提取信息中的圖片鏈接:(s|S)(r|R)(c|C)
*=
*('|")?(\w|\\|\/|\.)+('|"|
*|>)?
28、提取信息中的IP地址:(\d+)\.(\d+)\.(\d+)\.(\d+)
29、提取信息中的中國號碼:(86)*0*13\d{9}
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)院手術(shù)室保潔協(xié)議
- 農(nóng)業(yè)灌溉設(shè)備供應(yīng)協(xié)議
- 農(nóng)村社區(qū)建設(shè)承諾書
- 廣播電視維修施工合同
- 生物學(xué)科研素養(yǎng)提升計劃
- 酒店各級崗位安全生產(chǎn)職責(zé)制度
- 保護校園環(huán)境的建議書5篇
- 2022社?;疬`法違規(guī)案例學(xué)習(xí)心得體會范文五篇
- 《夏洛的網(wǎng)》讀后感集錦15篇
- 2025工礦產(chǎn)品購銷合同書樣本
- 2023年機動車檢測站質(zhì)量手冊(依據(jù)2023年版評審準則和補充要求編制)
- MOOC 數(shù)據(jù)新聞可視化-江西財經(jīng)大學(xué) 中國大學(xué)慕課答案
- MOOC 美在民間-南京農(nóng)業(yè)大學(xué) 中國大學(xué)慕課答案
- 期末競賽試卷(試題)-2023-2024學(xué)年六年級下冊數(shù)學(xué)人教版
- MOOC 電子技術(shù)實驗-北京科技大學(xué) 中國大學(xué)慕課答案
- 蘇州職業(yè)大學(xué)單招職業(yè)技能測試參考試題庫(含答案)
- 冬季基坑施工方案及措施
- 國家開放大學(xué)《Python語言基礎(chǔ)》實驗1:Python 基礎(chǔ)環(huán)境熟悉參考答案
- 2024淘寶村研究報告
- 老年人普法教育
- 遼寧省大連市2023-2024學(xué)年高二上學(xué)期期末考試數(shù)學(xué)試題(解析版)
評論
0/150
提交評論