站長資訊網
        最全最豐富的資訊網站

        PHP 正則表達式函數庫(兩套)

        在PHP中有兩套正則表達式函數庫,兩者功能相似,只是執行效率略有差異:
        一套是由PCRE(Perl Compatible Regular Expression)庫提供的。使用“preg_”為前綴命名的函數;
        一套由POSIX(Portable Operating System Interface of Unix )擴展提供的(PHP默認)。使用以“ereg_”為前綴命名的函數;
        PHP中,正則表達式有三個作用:
        匹配,也常常用于從字符串中析取信息。
        用新文本代替匹配文本。
        將一個字符串拆分為一組更小的信息塊。

        一個正則表達式中至少包含一個原子。
        原子(普通字符,如英文字符)
        元字符(有特殊功用的字符)
        模式修正字符(對正則表達式語義的修正)

        原子(Atom)
        單個字符、數字,如a~z,A~Z,0~9。
        模式單元,如(ABC)可以理解為由多個原子組成的大的原子。
        原子表,如 [ABC]。
        重新使用的模式單元,如:\1
        普通轉義字符,如:d, D, w
        轉義元字符,如:*,.

        POSIX正則表達式
        POSIX正則表達式全稱為Portable Operating System Interface of Unix,意為UNIX可移植操作系實現接口。

        構造POSIX正則表達式的方法和創建數學表達式的方法一樣,也就是用多種元字符與操作符將小的表達式結合在一起來創建更大的表達式。

        元字符(Meta-character)
        元字符是用于構造規則表達式的具有特殊含義的字符。如果要在正則表達式中包含元字符本身,必須在其前加上””進行轉義
        元字符 說明
        * 0次、1次或多次匹配其前的原子
        + 1次或多次匹配其前的原子
        ? 0次或1次匹配其前的原子
        | 匹配兩個或多個選擇 列如 [1-9]|[a-b]|[A-Z] 與其中任何匹配為ture
        ^ 匹配字符串串首的原子 例如 abscd===^afdgfgf 相匹配
        $ 匹配字符串串尾的原子 例如 dasdsv===v$
        [] 匹配方括號中的任一原子 例如 s===[dsadas]
        [^] 匹配除方括號中的原子外的任何字符 例如 aaaaa===[dddd]
        {m} 表示其前原子恰好出現m次
        {m,n} 表示其前原子至少出現m次,至少出現n次(n>m)
        {m,} 表示其前原子出現不少于m次
        () 整體表示一個原子
        . 匹配除換行之外的任何一個字符

        ^ $ 這兩個原字符在一起稱為定界
        abd===^abc$ 只有這樣才匹配

        模式匹配的順序
        順序 元字符 說明
        1 () 模式單元
        2 ?* +{} 重復匹配
        3 ^$ 邊界限制
        4 | 模式選擇

        POSIX正則表達式函數
        ereg()和eregi()
        ereg_replace()和eregi_replace()
        split()和spliti()

        ereg()和eregi()ereg()字符串匹配函數,eregi()是ereg()函數的忽略大小的版本
        語法格式:if (!ereg(‘^[^./][^/]*$’, $userfile))//不匹配格式輸出die
        {
        die(‘這是一個非法的文件名!’);
        }

        ereg_replace()和eregi_replace(忽略大小寫)替換
        string eregi_replace (“正則表達式”,“目標替換字符”,“替換目標”)
        語法格式:$string = “This is a test”;
        echo str_replace(” is”, ” was”, $string);
        echo ereg_replace(“( )is”, “\1was”, $string);\1 為繼承第一個整體
        echo ereg_replace(“(( )is)”, “\2was”, $string);\2繼承第二個整體

        split()和spliti(忽略大小寫)用正則表達式將字符串分割到數組中
        list:給數組中的值賦予一些變量
        語法格式:$date = “04/30/1973”;
        list($month, $day, $year) = split (‘[/.-]’, $date);//列出三個變數對應格式//以什么形式拆分 拆分誰
        echo “Month: $month; Day: $day; Year: $year<br />
        “;
        輸出結果Month: 04; Day: 30; Year: 1973

        多行匹配

        $rows = file(‘php.ini’); //將php.ini文件讀到數組中

        //循環便歷
        foreach($rows as $line)
        {
        if(trim($line))
        {
        //將匹配成功的參數寫入數組中
        if(eregi(“^([a-z0-9_.]*) *=(.*)”, $line, $matches)) //循環進行多行匹配
        {
        $options[$matches[1]] = trim($matches[2]);
        }
        unset($matches);
        }
        }

        //輸出參數結果
        print_r($options);

        PCRE正則表達式
        PCRE全稱為Perl Compatible Regular Expression,意思是Perl兼容正則表達式。
        在PCRE中,通常將模式表達式(即正則表達式)包含在兩個反斜線“/”之間,如“/apple/”。

        元字符(Meta-character)
        元字符 說明
        A 匹配字符串串首的原子
        Z 匹配字符串串尾的原子
        b 匹配單詞的邊界 /bis/ 匹配頭為is的字符串 /isb/ 匹配尾為is的字符串 /bisb/ 定界
        B 匹配除單詞邊界之外的任意字符 /Bis/ 匹配單詞“This”中的“is”

        d 匹配一個數字;等價于[0-9]
        D 匹配除數字以外任何一個字符;等價于[^0-9]
        w 匹配一個英文字母、數字或下劃線;等價于[0-9a-zA-Z_]
        W 匹配除英文字母、數字和下劃線以外任何一個字符;等價于[^0-9a-zA-Z_]
        s 匹配一個空白字符;等價于[f
        tv]
        S 匹配除空白字符以外任何一個字符;等價于[^f
        tv]
        f 匹配一個換頁符等價于 x0c 或 cL
        匹配一個換行符;等價于 x0a 或 cJ
        匹配一個回車符等價于x0d 或 cM
        t 匹配一個制表符;等價于 x09或cl
        v 匹配一個垂直制表符;等價于x0b或ck
        oNN 匹配一個八進制數字
        xNN 匹配一個十六進制數字
        cC 匹配一個控制字符

        模式修正符(Pattern Modifiers)
        i -可同時匹配大小寫字母
        M -將字符串視為多行
        S -將字符串視為單行,換行符做普通字符看待,使“.”匹配任何字符
        X -模式中的空白忽略不計
        U -匹配到最近的字符串
        e -將替換的字符串作為表達使用
        格式:/apple/i匹配“apple”或“Apple”等,忽略大小寫。 /i

        PCRE的模式單元
        //1 提取第一位的屬性
        /^d{2}([W])d{2}\1d{4}$匹配“12-31-2006”、“09/27/1996”、“86 01 4321”等字符串。但上述正則表達式不匹配“12/34-5678”的格式。這是因為模式“[W]”的結果“/”已經被存儲。下個位置“1”引用時,其匹配模式也是字符“/”。

        當不需要存儲匹配結果時使用非存儲模式單元“(?:)”
        例如/(?:a|b|c)(D|E|F)\1g/ 將匹配“aEEg”。在一些正則表達式中,使用非存儲模式單元是必要的。否則,需要改變其后引用的順序。上例還可以寫成/(a|b|c)(C|E|F)2g/。

        PCRE正則表達式函數
        preg_match()和preg_match_all()
        preg_quote()
        preg_split()
        preg_grep()
        preg_replace()

        preg_match()和preg_match_all()正則表達式的匹配
        語法格式:if (preg_match (“/php/i”, “PHP is the web scripting language of choice.”)) {
        print “A match was found.”;
        } else {
        print “A match was not found.”;
        }

        preg_quote()轉義正則表達式字符
        語法格式:$keywords = “$40 for a g3/400”;
        $keywords = preg_quote ($keywords, “/”);//轉義誰 /轉義符號
        echo $keywords;

        preg_split()用正則表達式分割字符串
        preg_split()本函數與split函數功能一致。
        語法格式:$keywords = preg_split (“/[s,]+/”, “hypertext language, programming”);
        print_r($keywords);

        preg_grep()返回與模式匹配的數組單元
        語法格式:$fl_array = preg_grep (“/^(d+)?.d+$/”, $array);

        preg_replace()執行正則表達式的搜索和替換
        語法格式:

        復制代碼 代碼如下:
        $string = “April 15, 2003”;
        $pattern = “/(w+) (d+), (d+)/i”;
        $replacement = “${1}1,$3”;
        print preg_replace($pattern, $replacement, $string);

        preg_match_all()進行全局正則表達式匹配
        語法格式:

        復制代碼 代碼如下:
        preg_match_all (“|<[^>]+>(.*)</[^>]+>|U”,
        “<b>example: </b><div align=left>this is a test</div>”,
        $out, PREG_PATTERN_ORDER);
        print $out[0][0].”, “.$out[0][1].”
        “;
        print $out[1][0].”, “.$out[1][1].”
        “;

        輸出結果:<b>example: </b>, <div align=left>this is a test</div> example: , this is a test

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 久久久久99精品成人片试看| 2023国产精品自拍| 91精品国产自产在线观看| 蜜国产精品jk白丝AV网站 | 欧美精品福利在线视频 | 丰满人妻熟妇乱又伦精品劲| 国产美女久久精品香蕉69| 亚洲国产午夜中文字幕精品黄网站 | 55夜色66夜色国产精品视频| 亚洲欧美日韩精品久久亚洲区| 国产精品极品| 久久精品成人免费看| 国产精品一区二区av| 亚洲国产精品国自产拍AV| 欧美精品黑人粗大| 精品国产日韩亚洲一区| 98香蕉草草视频在线精品看| 日韩精品成人一区二区三区| 国产精品久久网| 99久久精品日本一区二区免费| 亚洲精品高清无码视频| 亚洲精品国产日韩无码AV永久免费网| 精品无码久久久久久国产| 国产精品VIDEOSSEX久久发布| 99精品国产一区二区| 99久久99久久精品国产片| 日本一区精品久久久久影院| 久久精品一区二区| 真实国产乱子伦精品免费| 麻豆精品成人免费国产片| 国产精品合集一区二区三区| 久久精品国产91久久麻豆自制 | 最新国产精品精品视频| 亚洲欧美精品午睡沙发| 亚洲国产精品成人| 亚洲精品美女久久久久99小说| 欧美精品www| 夜夜高潮夜夜爽国产伦精品| 综合久久精品色| 精品国产三级a∨在线欧美| 精品久久久无码人妻中文字幕豆芽 |