亚洲最大看欧美片,亚洲图揄拍自拍另类图片,欧美精品v国产精品v呦,日本在线精品视频免费

  • 站長(zhǎng)資訊網(wǎng)
    最全最豐富的資訊網(wǎng)站

    自己學(xué)正則時(shí)做的筆記,其實(shí)正則也不難哦 php

    RT,正則可以搞定的東西很多哦,大家學(xué)習(xí)學(xué)習(xí)吧

    一.正則表達(dá)式
    1.匹配符
        1)頭匹配符”^”:如^0754,只匹配開(kāi)頭為0754的字符串
        2)尾匹配符”$”:如0754$,只匹配結(jié)尾為0754的字符串
        3)全字匹配:將^和$結(jié)合,如^0754$,匹配0754字符串
    2.轉(zhuǎn)義字符
        1)空字符:
            換行n
            回車(chē)r
            制表符t
        2)其他字符:
            “$” $
            “^” ^
            “+” +
            “/” /
    3.通配符
        1)*號(hào):用來(lái)匹配前面一個(gè)字符是否在字符串中出現(xiàn)零次或多次.
        例1:’abc*’,匹配含有ab的所有字符串。
        2)+號(hào):………………………………..一次或多次.
        例2:’abc+’,匹配含有abc的所有字符串。
        3)?號(hào):………………………………..零次或一次.
        例3:只匹配含有ab、abc結(jié)尾不再含c的字符串。如abca,aabc,aaab都可以,但abcc就不行。
    4.關(guān)于轉(zhuǎn)義字符$與雙、單引號(hào)(php4環(huán)境)
        1)正則表達(dá)式本身就是一個(gè)字符串。
        2)當(dāng)引號(hào)中含有$時(shí),用雙、單引號(hào)定義就有區(qū)別,區(qū)別如下:
            (1)使用單引號(hào)定義時(shí),解釋器會(huì)把引號(hào)內(nèi)所有字符(包括$在內(nèi))都原封不動(dòng)的賦值給字符串變量。
            (2)使用雙引號(hào)定義時(shí),解釋器會(huì)把引號(hào)內(nèi)”$”字符以及其后的合法字符(字母、數(shù)字、下劃線)翻譯成變量,直到遇到一個(gè)非法字符才認(rèn)為變量名結(jié)束,該非法字符及其后面的字符都被視為一般字符賦給字符串變量,直到遇到下一個(gè)”$”為止。
            (3)注意:?jiǎn)蝹€(gè)$出現(xiàn)在雙引號(hào)的尾部,并且其后面不再有任何字符的時(shí)候,解釋器不會(huì)將其翻譯成變量。也不需要加轉(zhuǎn)義,當(dāng)然不提倡。
            (4)如果待匹配的字符中本身就有$,就無(wú)法用雙引號(hào)來(lái)定義這個(gè)正則表達(dá)式,原因是轉(zhuǎn)義字符$在單,雙引號(hào)中表示的意義不同:
                <1>雙引號(hào)中,$和單個(gè)的$意義是一樣的,都是代表尾匹配符,因此c$$=c$=c$$=c$=c$$;雙引號(hào)中,$在任何時(shí)刻都只代表一個(gè)字符”$”,echo “c$$”結(jié)果是c$$,并且$和單個(gè)的$(單個(gè)的$是指該$無(wú)法和其后字符組成變量名)是完全等效的,都是尾匹配符,所以雙引號(hào)中是無(wú)法寫(xiě)入作為非尾匹配字符的字符”$”的,也正是這個(gè)原因,大多數(shù)需要匹配$時(shí)定義正則表達(dá)式只能用”。
                <2>單引號(hào)中,$的意義僅僅表示字符”$”,尾匹配符是$,不管后面是否有合法變量名字符;單引號(hào)中,$其實(shí)是兩個(gè)字符,如不用于正則匹配將沒(méi)有任何意義,echo ‘c$$’結(jié)果仍是c$$。單作為正則表達(dá)式來(lái)使用,單引號(hào)中的$表示的是特殊字符”$”,而尾匹配符就是單獨(dú)的$字符。
        3)正則表達(dá)式的尾匹配符”$”和變量的定義符是相同的:
            例1:定義正則表達(dá)式為^ab$:$pattern=”^ab$”;轉(zhuǎn)義字符$在雙引號(hào)中就表示字符$,結(jié)果是^ab$。
            例2:如上題,使用$pattern=”^ab$”;顯然是錯(cuò)誤的,但是由于$在尾部,后面沒(méi)有其他字符,所以依然適用。
            例3:以字符組合c$結(jié)尾的正則表達(dá)式:$pattern=’c$$’;
            例4:如上題,$pattern=”c$$”;正則表達(dá)式將$視為尾匹配符,故只匹配以c結(jié)尾。
    5.”[]”方括號(hào)(字符簇)用法
        1)[]匹配一個(gè)字符,在[]中使用^開(kāi)頭表示取非,即其后的字符全部是不匹配的。
        例1:[a-zA-Z0-9]匹配所有大小寫(xiě)字母和數(shù)字。
        例2:[ntrf]匹配所有空字符。
        例3:[^A-Z]不匹配大寫(xiě)字母。
        例4:^[^0-9]匹配不以數(shù)字開(kāi)頭的字符或字符串
        2)特殊字符”.”(句點(diǎn))匹配除了”新行”之外的所有字符,模式^.abc$匹配任何以abc結(jié)尾的字符,但是不能匹配其本身。模式”.”則可以匹配任何字符串,除了空字符串和只有一個(gè)”新行”字符的字符串。
        例1:’^.abc$’;匹配所有尾部含有abc的字符串,不匹配小數(shù)(新行),當(dāng)不匹配abc。
        例2:’.’;匹配所有字符串,但不匹配空值。
        例3:’.abc’;匹配所有含abc的字符串,小數(shù)等等都可以,前提是不以abc為首,不匹配abc。
        例4:’.abc$’;匹配所有以abc結(jié)尾的字符串,任何小數(shù)等等都可以,不匹配abc。
        3)php提供了內(nèi)置通用字符簇:
        [[:alpha:]]任何字母
        [[:digit:]]任何數(shù)字
        [[:alnum:]]任何字母和數(shù)字
        [[:space:]]任何空白字符
        [[:upper:]]任何大寫(xiě)字母
        [[:lower:]]任何小寫(xiě)字母
        [[:punct:]]任何表點(diǎn)符號(hào)
        [[:xdigit:]]任何十六進(jìn)制數(shù)字
        [[:cntrl:]]任何ASCII值小于32的字符
        注意:以上字符簇有個(gè)特點(diǎn),只要被匹配的字符或字符串中有此字符,即匹配正確,不管字符串是以什么方式組成的。
    6.”{}”大括號(hào)用法
        1)方括號(hào)只能匹配一個(gè)字符,而匹配多個(gè)字符只能用{}實(shí)現(xiàn):{}用來(lái)確定前面內(nèi)容出現(xiàn)的次數(shù)。{n}表示出現(xiàn)n次;{m,n}表示出現(xiàn)m~n次,包括m和n次;{n,}表示出現(xiàn)n次或者n次以上。
        例1:^a{10}$;匹配aaaaaaaaaa。
        例2:[0-9]{1,}$;匹配所有>0的數(shù)。
        2)”{}”與通配符之間的關(guān)系
        ?  相當(dāng)于 {0,1} 零次或一次
        *  ….. {0,} 零次或無(wú)數(shù)次
        +  ….. {1,} 一次或無(wú)數(shù)次
    7.”()”用法
        圓括號(hào)”()”括住的pattern表示子模式,如$pattern='([1-9]{1}[0-9]{3})-([0-1]{1}[1-2]{1})-([0-3]{1}([0-9]|))’;()擴(kuò)住的就是一個(gè)個(gè)子模式,()相當(dāng)于把他們獨(dú)立起來(lái),分別匹配而相互不干擾。
    二.POSIX風(fēng)格正則表達(dá)式函數(shù)
    1.ereg
        ereg(pattern,string,[array $regs]);
        eregi(pattern,string,[array $regs]);
        ereg函數(shù)在string中找到滿足pattern模式的文本,如果找到true,沒(méi)找到false。如果有第三個(gè)參數(shù)$regs,那找到的文本將放在$regs[0]中,并且regs數(shù)組中將一次存放各個(gè)圓括號(hào)表達(dá)的子模式匹配的結(jié)果。$regs[1]中存放了第一個(gè)子模式所匹配的結(jié)果,$regs[2]中是第二個(gè),順序從左到右,依次類(lèi)推。如果沒(méi)有找到匹配的文本,$regs數(shù)組的值不會(huì)被改變。
        注意:如果找到了匹配的文本,不管找到的子模式是多少個(gè)>9還是<9,ereg()只會(huì)改變$regs數(shù)組前10個(gè)元素的值。但是這不會(huì)影響函數(shù)對(duì)子模式組合的匹配結(jié)果。ereg總是先匹配完,如果沒(méi)發(fā)現(xiàn)匹配的文本就false,發(fā)現(xiàn)了就true。如果有子模式,會(huì)逐步根據(jù)這些子模式重新在字符串中尋找匹配的文本,直到$regs數(shù)組被填滿10個(gè)元素或者所有子模式被匹配完,如果子模式少于10則剩余的$regs將被賦空值??傊痪湓挘ヅ錃w匹配,$regs歸$regs,$regs只有10個(gè)值。
        eregi()函數(shù)與ereg()基本用法相同,只是eregi對(duì)大小寫(xiě)不敏感。
    2.ereg_replace和eregi_replace
        ereg_replace(pattern,string replacement,string)
        eregi_replace(pattern,string replacement,string)
        string字串中滿足pattern的文本將被替換成replacement。如果string中有pattern匹配的文本,那么返回替換之后的值,如果沒(méi)有,則返回原來(lái)的string值。
        如果pattern中包含子模式,子模式可以有選擇的被保留而不被替換。
        例1:pattern中的第二個(gè)子模式不被替換,replacement可寫(xiě)成這樣:replacement\2。這樣string中匹配的pattern的字符串將被替換為replacement+pattern2,pattern2表示匹配pattern的文本中又匹配pattern的第二個(gè)子模式的文本。如果使用”\0″表示保留整個(gè)匹配文本。利用這個(gè)特性可以實(shí)現(xiàn)在特定的字符串之后插入文本的操作。
        replacement必須是字符串類(lèi)型變量,如果不是,替換時(shí)將強(qiáng)制轉(zhuǎn)換成字符串類(lèi)型。
    3.split()函數(shù)和spliti()函數(shù)用法
        split(pattern,string,[int limit]);
        spliti(pattern,string,[int limit]);
        split以正則表達(dá)式pattern定義的模式為分隔符將string分隔成幾個(gè)部分。如果分隔成功,返回的值為各個(gè)分隔后部分組成的數(shù)組,失敗則返回false??蛇xlimit表示最大分割塊數(shù)。如果limit為5,那么即使string有>5個(gè)的地方符合pattern,string也只被分割為5個(gè)部分,最后一個(gè)部分是string去掉前四個(gè)部分后剩下的部分。返回值中也只有5個(gè)元素。
    三.perl風(fēng)格正則表達(dá)式及相關(guān)函數(shù)
    1.perl正則語(yǔ)法
        perl分隔符,可使用”/”,”!”和”{}”。
        例1:/^[^0-9]/     !^[0-9]!    {^[0-9]}三個(gè)都一樣。
        在分隔符內(nèi)部,分隔字符本身就是一個(gè)特殊敏感字符,要進(jìn)行轉(zhuǎn)義。如果用分隔符”/”,正則中又用了表達(dá)字符的”/”,則必須要用”/”。如果混合用”/”和”!”就沒(méi)問(wèn)題。
        例2:///$/    !//$! 兩者也相同
        例3:!^!![0-9]$!    /^!![0-9]$/ 兩者也相同
    2.perl特殊意義字符
        a ASCII值為7的告警符
        b 詞的邊界
        A 和脫出符號(hào)(“/”)等價(jià)
        B 非詞邊界
        cn 控制字符
        d 單個(gè)數(shù)字
        D 單個(gè)非數(shù)字
        s 單個(gè)空白
        S 單個(gè)非空白
        w 單個(gè)的字母或下劃線
        W 單個(gè)的非詞字符(不是字母也不是下劃線)
        Z 從目標(biāo)字串的尾部開(kāi)始匹配
    3.高級(jí)特性
        1)或運(yùn)算”|”:
            例如!^ex|em!匹配條件是ex或em開(kāi)頭的字符串,還可以寫(xiě)成!^e(x|m)!。
            注意:()內(nèi)的內(nèi)容代表子模式
        2)邏輯符號(hào)后面的模式選項(xiàng)
            !正則表達(dá)式!邏輯選項(xiàng)
            A:只匹配位于目標(biāo)字串開(kāi)頭的字符。
            E:該選項(xiàng)使轉(zhuǎn)義字符$構(gòu)成的正則表達(dá)式只匹配目標(biāo)字符串的結(jié)尾字符。如果選擇m選項(xiàng),該選項(xiàng)就被忽略。
            U:該選項(xiàng)禁止最大長(zhǎng)度的搜索。一般情況下,搜索會(huì)盡量找最長(zhǎng)的匹配字符串。例如模式/a+/在”caaaaab”字符串中的匹配結(jié)果是”aaaaa”,但是使用該選項(xiàng)的模式/a+/U匹配的結(jié)果會(huì)是”a”。
            S:對(duì)模式進(jìn)行學(xué)習(xí),提高查找速度。
            i:該選項(xiàng)忽略大小寫(xiě)。
            m:該選項(xiàng)將含有換行符的字符串視為多行而不是一行。這個(gè)時(shí)候”$”,”^”等字符會(huì)匹配每個(gè)換行符。
            s:該選項(xiàng)使句點(diǎn)”.”也匹配換行符。
            x:該選項(xiàng)通知PHP解釋器在分析的時(shí)候忽略正則表達(dá)式定義中的非轉(zhuǎn)義空格符。這樣可以在正則表達(dá)式中使用空格來(lái)增強(qiáng)其可讀性,但這時(shí)在表達(dá)式中使用空格符必須使用轉(zhuǎn)義字符。
        3)擴(kuò)展模式符號(hào)。
            (?#comment)    添加注釋comment,可以增強(qiáng)正則可讀性。
            (?=pattern)    指定在模式之后必須跟隨值pattern。
            (?!pattern)    指定在模式之后不能跟隨值pattern。
            (?n)           在模式內(nèi)部而非結(jié)尾處定義模式選項(xiàng)n。
            (?: )           消耗字符,不捕獲匹配結(jié)果。
            例:echo ereg(“?:^a$”,”a”);//無(wú)任何輸出。
    4.per正則函數(shù)
        1.preg_grep函數(shù)
            preg_grep(pattern,array input);
            輸入數(shù)組input中尋找匹配模式pattern的字串,并將所有的匹配字符串返回。返回值就是所有匹配的字符串組成的數(shù)組。
        2.preg_match函數(shù)
            preg_match(pattern,string subject,[array matches])
            該函數(shù)在subject字符串中尋找匹配pattern的字符串。如果找到則返回一個(gè)非零值,否則返回零值。如果選用了可選項(xiàng)matches,那么匹配的字符串將被放到第一個(gè)元素的位置,可以用$matches[0]來(lái)讀取,圓括號(hào)匹配的結(jié)果也按順序放在這個(gè)數(shù)組中,第一個(gè)是$matches[1],第二個(gè)是$matches[2],依次類(lèi)推。
        3.preg_match_all函數(shù)
            preg_match_all(pattern,subject,array matches,[int order])
            該函數(shù)在subject字符串中尋找匹配pattern的互不重疊的文本,找到了匹配的文本則返回匹配文本的個(gè)數(shù),否則返回0。匹配文本被放在二維數(shù)組matches中,matches[0]中存放的是所有符合的字符串。各種嵌入的子模式匹配的結(jié)果依次放在數(shù)組matches[1]~[n]中。
            order參數(shù)可選,可取的值為PREG_PATTERN_ORDER和PREG_SET_ORDER。
        4.preg_replace函數(shù)
            preg_replace(pattern,replacement,subject,[int limit])
            該函數(shù)將subject中符合pattern模式的部分替換成replacement,返回值類(lèi)型和subject類(lèi)型一樣,如果有替換,則返回替換后的值,反之則返回原來(lái)的值。
            參數(shù)可以是數(shù)組也可以是變量,有幾種情況:
                <1>如果subject參數(shù)是數(shù)組類(lèi)型。函數(shù)對(duì)每一個(gè)數(shù)組元素進(jìn)行替換操作;
                <2>如果pattern是數(shù)組則函數(shù)根據(jù)每一個(gè)pattern中的類(lèi)型進(jìn)行替換;
                <3>如果pattern和replacement都是數(shù)組,則按兩個(gè)數(shù)組中的元素對(duì)應(yīng)完成替換;
                <4>如果replacement中的元素個(gè)數(shù)少于pattern中的元素個(gè)數(shù)。那么不夠的部分將有空字符串來(lái)代替。
        5.preg_split函數(shù)
            preg_split(pattern,subject,[int limit][flages])
            該函數(shù)以pattern定義的模式為分隔符將subject字符串分隔為若干個(gè)部分,返回?cái)?shù)組,其中存放被分隔后的字符串。limit可限制返回字符串的數(shù)目,如果設(shè)置為-1表示對(duì)返回的字符串?dāng)?shù)目不加任何限制。flags也是可選項(xiàng),其有兩個(gè)值:PREG_SPLIT_NO_EMPTY設(shè)定函數(shù)不返回空字符串,PERG_SPLIT_DELIM_CAPTURE,該選項(xiàng)設(shè)定pattern中的嵌入子模式也會(huì)被函數(shù)匹配。

    贊(0)
    分享到: 更多 (0)
    網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)