亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Regex > 正文

自己學正則時做的筆記,其實正則也不難哦 php

2020-03-16 21:22:36
字體:
來源:轉載
供稿:網友

RT,正則可以搞定的東西很多哦,大家學習學習吧

一.正則表達式

1.匹配符

1)頭匹配符"^":如^0754,只匹配開頭為0754的字符串

2)尾匹配符"$":如0754$,只匹配結尾為0754的字符串

3)全字匹配:將^和$結合,如^0754$,匹配0754字符串

2.轉義字符

1)空字符:

換行/n

回車/r

制表符/t

2)其他字符:

"$"/$

"^"/^

"+"/+

"/"//

3.通配符

1)*號:用來匹配前面一個字符是否在字符串中出現零次或多次.

例1:'abc*',匹配含有ab的所有字符串。

2)+號:......................................一次或多次.

例2:'abc+',匹配含有abc的所有字符串。

3)?號:......................................零次或一次.

例3:只匹配含有ab、abc結尾不再含c的字符串。如abca,aabc,aaab都可以,但abcc就不行。

4.關于轉義字符/$與雙、單引號(php4環境)

1)正則表達式本身就是一個字符串。

2)當引號中含有$時,用雙、單引號定義就有區別,區別如下:

(1)使用單引號定義時,解釋器會把引號內所有字符(包括$在內)都原封不動的賦值給字符串變量。

(2)使用雙引號定義時,解釋器會把引號內"$"字符以及其后的合法字符(字母、數字、下劃線)翻譯成變量,直到遇到一個非法字符才認為變量名結束,該非法字符及其后面的字符都被視為一般字符賦給字符串變量,直到遇到下一個"$"為止。

(3)注意:單個$出現在雙引號的尾部,并且其后面不再有任何字符的時候,解釋器不會將其翻譯成變量。也不需要加轉義/,當然不提倡。

(4)如果待匹配的字符中本身就有$,就無法用雙引號來定義這個正則表達式,原因是轉義字符/$在單,雙引號中表示的意義不同:

<1>雙引號中,/$和單個的$意義是一樣的,都是代表尾匹配符,因此c/$$=c/$=c/$/$=c$=c/$/$;雙引號中,/$在任何時刻都只代表一個字符"$",echo"c/$$"結果是c$$,并且/$和單個的$(單個的$是指該$無法和其后字符組成變量名)是完全等效的,都是尾匹配符,所以雙引號中是無法寫入作為非尾匹配字符的字符"$"的,也正是這個原因,大多數需要匹配$時定義正則表達式只能用''。

<2>單引號中,/$的意義僅僅表示字符"$",尾匹配符是$,不管后面是否有合法變量名字符;單引號中,/$其實是兩個字符,如不用于正則匹配將沒有任何意義,echo'c/$$'結果仍是c/$$。單作為正則表達式來使用,單引號中的/$表示的是特殊字符"$",而尾匹配符就是單獨的$字符。

3)正則表達式的尾匹配符"$"和變量的定義符是相同的:

例1:定義正則表達式為^ab$:$pattern="^ab/$";轉義字符/$在雙引號中就表示字符$,結果是^ab$。

例2:如上題,使用$pattern="^ab$";顯然是錯誤的,但是由于$在尾部,后面沒有其他字符,所以依然適用。

例3:以字符組合c$結尾的正則表達式:$pattern='c/$$';

例4:如上題,$pattern="c/$$";正則表達式將/$視為尾匹配符,故只匹配以c結尾。

5."[]"方括號(字符簇)用法

1)[]匹配一個字符,在[]中使用^開頭表示取非,即其后的字符全部是不匹配的。

例1:[a-zA-Z0-9]匹配所有大小寫字母和數字。

例2:[/n/t/r/f]匹配所有空字符。

例3:[^A-Z]不匹配大寫字母。

例4:^[^0-9]匹配不以數字開頭的字符或字符串

2)特殊字符"."(句點)匹配除了"新行"之外的所有字符,模式^.abc$匹配任何以abc結尾的字符,但是不能匹配其本身。模式"."則可以匹配任何字符串,除了空字符串和只有一個"新行"字符的字符串。

例1:'^.abc$';匹配所有尾部含有abc的字符串,不匹配小數(新行),當不匹配abc。

例2:'.';匹配所有字符串,但不匹配空值。

例3:'.abc';匹配所有含abc的字符串,小數等等都可以,前提是不以abc為首,不匹配abc。

例4:'.abc$';匹配所有以abc結尾的字符串,任何小數等等都可以,不匹配abc。

3)php提供了內置通用字符簇:

[[:alpha:]]任何字母

[[:digit:]]任何數字

[[:alnum:]]任何字母和數字

[[:space:]]任何空白字符

[[:upper:]]任何大寫字母

[[:lower:]]任何小寫字母

[[:punct:]]任何表點符號

[[:xdigit:]]任何十六進制數字

[[:cntrl:]]任何ASCII值小于32的字符

注意:以上字符簇有個特點,只要被匹配的字符或字符串中有此字符,即匹配正確,不管字符串是以什么方式組成的。

6."{}"大括號用法

1)方括號只能匹配一個字符,而匹配多個字符只能用{}實現:{}用來確定前面內容出現的次數。{n}表示出現n次;{m,n}表示出現m~n次,包括m和n次;{n,}表示出現n次或者n次以上。

例1:^a{10}$;匹配aaaaaaaaaa。

例2:[0-9]{1,}$;匹配所有>0的數。

2)"{}"與通配符之間的關系

?相當于{0,1}零次或一次

*.....{0,}零次或無數次

+.....{1,}一次或無數次

7."()"用法

圓括號"()"括住的pattern表示子模式,如$pattern='([1-9]{1}[0-9]{3})-([0-1]{1}[1-2]{1})-([0-3]{1}([0-9]|))';()擴住的就是一個個子模式,()相當于把他們獨立起來,分別匹配而相互不干擾。

二.POSIX風格正則表達式函數

1.ereg

ereg(pattern,string,[array$regs]);

eregi(pattern,string,[array$regs]);

ereg函數在string中找到滿足pattern模式的文本,如果找到true,沒找到false。如果有第三個參數$regs,那找到的文本將放在$regs[0]中,并且regs數組中將一次存放各個圓括號表達的子模式匹配的結果。$regs[1]中存放了第一個子模式所匹配的結果,$regs[2]中是第二個,順序從左到右,依次類推。如果沒有找到匹配的文本,$regs數組的值不會被改變。

注意:如果找到了匹配的文本,不管找到的子模式是多少個>9還是<9,ereg()只會改變$regs數組前10個元素的值。但是這不會影響函數對子模式組合的匹配結果。ereg總是先匹配完,如果沒發現匹配的文本就false,發現了就true。如果有子模式,會逐步根據這些子模式重新在字符串中尋找匹配的文本,直到$regs數組被填滿10個元素或者所有子模式被匹配完,如果子模式少于10則剩余的$regs將被賦空值??傊痪湓?,匹配歸匹配,$regs歸$regs,$regs只有10個值。

eregi()函數與ereg()基本用法相同,只是eregi對大小寫不敏感。

2.ereg_replace和eregi_replace

ereg_replace(pattern,stringreplacement,string)

eregi_replace(pattern,stringreplacement,string)

string字串中滿足pattern的文本將被替換成replacement。如果string中有pattern匹配的文本,那么返回替換之后的值,如果沒有,則返回原來的string值。

如果pattern中包含子模式,子模式可以有選擇的被保留而不被替換。

例1:pattern中的第二個子模式不被替換,replacement可寫成這樣:replacement//2。這樣string中匹配的pattern的字符串將被替換為replacement+pattern2,pattern2表示匹配pattern的文本中又匹配pattern的第二個子模式的文本。如果使用"//0"表示保留整個匹配文本。利用這個特性可以實現在特定的字符串之后插入文本的操作。

replacement必須是字符串類型變量,如果不是,替換時將強制轉換成字符串類型。

3.split()函數和spliti()函數用法

split(pattern,string,[intlimit]);

spliti(pattern,string,[intlimit]);

split以正則表達式pattern定義的模式為分隔符將string分隔成幾個部分。如果分隔成功,返回的值為各個分隔后部分組成的數組,失敗則返回false??蛇xlimit表示最大分割塊數。如果limit為5,那么即使string有>5個的地方符合pattern,string也只被分割為5個部分,最后一個部分是string去掉前四個部分后剩下的部分。返回值中也只有5個元素。

三.perl風格正則表達式及相關函數

1.perl正則語法

perl分隔符,可使用"/","!"和"{}"。

例1:/^[^0-9]/!^[0-9]!{^[0-9]}三個都一樣。

在分隔符內部,分隔字符本身就是一個特殊敏感字符,要進行轉義。如果用分隔符"/",正則中又用了表達字符的"/",則必須要用"//"。如果混合用"/"和"!"就沒問題。

例2://///$/!//$!兩者也相同

例3:!^/!/![0-9]$!/^!![0-9]$/兩者也相同

2.perl特殊意義字符

/aASCII值為7的告警符

/b詞的邊界

/A和脫出符號("/")等價

/B非詞邊界

/cn控制字符

/d單個數字

/D單個非數字

/s單個空白

/S單個非空白

/w單個的字母或下劃線

/W單個的非詞字符(不是字母也不是下劃線)

/Z從目標字串的尾部開始匹配

3.高級特性

1)或運算"|":

例如!^ex|em!匹配條件是ex或em開頭的字符串,還可以寫成!^e(x|m)!。

注意:()內的內容代表子模式/

2)邏輯符號后面的模式選項

!正則表達式!邏輯選項

A:只匹配位于目標字串開頭的字符。

E:該選項使轉義字符$構成的正則表達式只匹配目標字符串的結尾字符。如果選擇m選項,該選項就被忽略。

U:該選項禁止最大長度的搜索。一般情況下,搜索會盡量找最長的匹配字符串。例如模式/a+/在"caaaaab"字符串中的匹配結果是"aaaaa",但是使用該選項的模式/a+/U匹配的結果會是"a"。

S:對模式進行學習,提高查找速度。

i:該選項忽略大小寫。

m:該選項將含有換行符的字符串視為多行而不是一行。這個時候"$","^"等字符會匹配每個換行符。

s:該選項使句點"."也匹配換行符。

x:該選項通知PHP解釋器在分析的時候忽略正則表達式定義中的非轉義空格符。這樣可以在正則表達式中使用空格來增強其可讀性,但這時在表達式中使用空格符必須使用轉義字符。

3)擴展模式符號。

(?#comment)添加注釋comment,可以增強正則可讀性。

(?=pattern)指定在模式之后必須跟隨值pattern。

(?!pattern)指定在模式之后不能跟隨值pattern。

(?n)在模式內部而非結尾處定義模式選項n。

(?:)消耗字符,不捕獲匹配結果。

例:echoereg("?:^a$","a");//無任何輸出。

4.per正則函數

1.preg_grep函數

preg_grep(pattern,arrayinput);

輸入數組input中尋找匹配模式pattern的字串,并將所有的匹配字符串返回。返回值就是所有匹配的字符串組成的數組。

2.preg_match函數

preg_match(pattern,stringsubject,[arraymatches])

該函數在subject字符串中尋找匹配pattern的字符串。如果找到則返回一個非零值,否則返回零值。如果選用了可選項matches,那么匹配的字符串將被放到第一個元素的位置,可以用$matches[0]來讀取,圓括號匹配的結果也按順序放在這個數組中,第一個是$matches[1],第二個是$matches[2],依次類推。

3.preg_match_all函數

preg_match_all(pattern,subject,arraymatches,[intorder])

該函數在subject字符串中尋找匹配pattern的互不重疊的文本,找到了匹配的文本則返回匹配文本的個數,否則返回0。匹配文本被放在二維數組matches中,matches[0]中存放的是所有符合的字符串。各種嵌入的子模式匹配的結果依次放在數組matches[1]~[n]中。

order參數可選,可取的值為PREG_PATTERN_ORDER和PREG_SET_ORDER。

4.preg_replace函數

preg_replace(pattern,replacement,subject,[intlimit])

該函數將subject中符合pattern模式的部分替換成replacement,返回值類型和subject類型一樣,如果有替換,則返回替換后的值,反之則返回原來的值。

參數可以是數組也可以是變量,有幾種情況:

<1>如果subject參數是數組類型。函數對每一個數組元素進行替換操作;

<2>如果pattern是數組則函數根據每一個pattern中的類型進行替換;

<3>如果pattern和replacement都是數組,則按兩個數組中的元素對應完成替換;

<4>如果replacement中的元素個數少于pattern中的元素個數。那么不夠的部分將有空字符串來代替。

5.preg_split函數

preg_split(pattern,subject,[intlimit][flages])

該函數以pattern定義的模式為分隔符將subject字符串分隔為若干個部分,返回數組,其中存放被分隔后的字符串。limit可限制返回字符串的數目,如果設置為-1表示對返回的字符串數目不加任何限制。flags也是可選項,其有兩個值:PREG_SPLIT_NO_EMPTY設定函數不返回空字符串,PERG_SPLIT_DELIM_CAPTURE,該選項設定pattern中的嵌入子模式也會被函數匹配。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲一级黄色av| 亚洲影院色在线观看免费| 国产精品一区二区久久久| 国产日韩精品在线观看| 国产精品午夜国产小视频| 国产精品免费网站| 成人在线精品视频| 日韩国产在线看| 欧美激情综合亚洲一二区| 中文欧美在线视频| 97在线精品视频| 国外成人免费在线播放| 亚洲视频自拍偷拍| 久久五月天色综合| 欧美亚州一区二区三区| 欧美日韩另类字幕中文| 亚洲精品一区中文| 精品视频在线观看日韩| 亚洲国产精品美女| 日韩免费视频在线观看| 亚洲国产精品美女| 亚洲午夜未删减在线观看| 在线中文字幕日韩| 国产91精品久久久久| 综合欧美国产视频二区| 国产精品一区二区三| 欧美日韩一区二区免费视频| 久久精品一本久久99精品| 在线电影av不卡网址| 亚洲精品v天堂中文字幕| 国产精品成人av在线| 日本国产欧美一区二区三区| 亚洲欧美在线x视频| 中文字幕av一区| 亚洲视频网站在线观看| 97色在线观看免费视频| 日韩成人黄色av| 国产成人精品最新| 欧美在线视频一二三| 久久久久久中文| 97视频在线观看亚洲| 欧美性猛交xxxx免费看| 国产视频在线观看一区二区| 日韩在线观看高清| 日韩av影片在线观看| 精品爽片免费看久久| 中文字幕日本欧美| 国产精品999999| 久久久久中文字幕| 久久久久女教师免费一区| 欧美激情视频网站| 91精品国产高清久久久久久久久| 57pao精品| 国产精品福利观看| 日韩视频永久免费观看| 97香蕉超级碰碰久久免费的优势| 久久久国产成人精品| 日本成人免费在线| 日韩精品999| 91精品免费久久久久久久久| 国产又爽又黄的激情精品视频| 久久久在线免费观看| 在线播放日韩精品| 国产精品色午夜在线观看| 国产精品一区二区三区免费视频| 欧美亚洲成人免费| 51精品国产黑色丝袜高跟鞋| 亚洲国产成人91精品| 在线观看日韩视频| 久久99国产精品久久久久久久久| 97精品国产97久久久久久免费| 欧美中文在线字幕| 欧美裸体视频网站| 中文字幕精品—区二区| 欧美xxxx综合视频| 久久精品99无色码中文字幕| 日韩av电影在线网| 日韩在线免费av| 亚洲视频网站在线观看| 精品免费在线视频| 亚洲综合精品伊人久久| 欧美在线视频一二三| 日韩av电影国产| 亚洲男人天堂网| 久久天天躁狠狠躁老女人| 91在线网站视频| 欧美精品在线网站| 亚洲人成网站999久久久综合| 欧美激情一区二区三区在线视频观看| 国内精品免费午夜毛片| 福利视频一区二区| 久久久久国产精品免费| 国产国产精品人在线视| 亚洲国产美女精品久久久久∴| 国产精品精品久久久久久| 亚洲精品国产精品自产a区红杏吧| 亚洲国产精品网站| 国产美女精品视频免费观看| 亚洲成人av中文字幕| 97在线视频免费播放| 91av视频导航| 亚洲成人网久久久| 综合久久五月天| 日韩av在线免费观看| 视频一区视频二区国产精品| 亚洲国产女人aaa毛片在线| 国产精品亚洲视频在线观看| 国产精品爱啪在线线免费观看| 久久久999精品| 成人春色激情网| 欧洲一区二区视频| 亚洲国产精品国自产拍av秋霞| 一本色道久久88综合日韩精品| 成人av资源在线播放| 中文字幕久久久av一区| 国产成人免费91av在线| 久久久久久国产| 亚洲一区二区精品| 91精品国产高清久久久久久久久| 精品毛片网大全| 国产精品久久久久久久久久99| 日韩视频在线一区| 欧美重口另类videos人妖| 国产精品成人va在线观看| 国产免费一区二区三区在线能观看| 国产午夜精品一区理论片飘花| 欧美亚洲国产日本| 4p变态网欧美系列| 日韩美女av在线| 九九热精品视频国产| 操人视频在线观看欧美| 狠狠躁天天躁日日躁欧美| 亚洲最大的网站| 亚洲最新av在线网站| 国产精品稀缺呦系列在线| 亚洲第一页在线| 91tv亚洲精品香蕉国产一区7ujn| 91久久久久久久久久| 欧美日韩国产丝袜美女| 久久这里只有精品99| 在线日韩中文字幕| 久久久久久噜噜噜久久久精品| 欧美大片在线影院| 国产精品女人久久久久久| 国产日本欧美视频| 亚洲a级在线播放观看| 亚洲aaaaaa| xvideos亚洲| 亚洲va码欧洲m码| 欧美日韩一二三四五区| 正在播放欧美视频| 性欧美亚洲xxxx乳在线观看| 色偷偷噜噜噜亚洲男人| 4p变态网欧美系列| 亚洲人成毛片在线播放| 2020国产精品视频| 国内精品久久久久久影视8| 欧美激情aaaa| 国产精品第1页| 精品精品国产国产自在线| 欧美激情a∨在线视频播放| 日韩大陆毛片av| 色综合影院在线| 日韩精品极品毛片系列视频|