程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> PHP中的正則表達式的使用

PHP中的正則表達式的使用

編輯:PHP綜合

PHP中的正則表達式基礎知識
1.正則表達式就是描述字符串排列模式的一種自定義語法規則
2.如果可以使用字符串處理函數完成的任務,就不使用正則表達式
3.有一些復雜的操作,只能使用正則表達式完成
4.正則表達式也稱為一種模式表達式
5.正則表達式就是通過構建具有特定規則的模式,與輸入的字符信息比較,在進行分割、匹配、查找、替換等工作
    例:"/\<img\s*src=\".*?\"\/\>/"
        a.正則表達式也是一個字符串
        b.由具有特殊意義的字符串組成的字符串
        c.具有一定編寫規則,也是一種模式
        d.看作是一種編程語言(是用一些特殊字符,按規則編寫出一個字符串,形成一種模式---正則表達式)

        注意:如果正則表達式,不和函數一起使用,則它就是一個字符串,只有將正則表達式放到某個函數中使用,才能發揮出正則表達式的作用。
    

    在PHP中給我們提供兩套正則表達式函數庫
    POSIX擴展正則表達式函數庫
    Perl兼容正則表達式函數庫

    這兩個函數功能一樣,找一個處理字符串效率高的
    注意:由於功能一樣,所以推薦使用Perl兼容正則表達式函數庫

正則表達式的模式如何編寫
    例:"/\<img\s*src=\".*?\"\/\>/iU"
    語法:
        1.定界符  //
                除了字母、數字和正斜線\以外的任一字符都可以是定界符
                | |
                / /
                { }
                ! !
                我們一般使用//
        2.原子。 img \s .
            注意:原子是正則表達式的最基本組成單位,而且必須至少要包含一個原子
            只要一個正則表達式可以單獨使用的字符,就是原子

            1.所有打印(所有可以用鍵盤在屏幕上輸出的字符串)和非打印字符(看不到的)
            2.* + ? ( . < 如果所有有意義的字符,想要作為原子使用,統統使用“\”轉義字符轉義
                在無特殊意義的字符前使用轉義字符時還是把它看成普通字符來看
                轉義字符可以將有意義的字符轉成沒意義的字符,還可以將沒意義的字符轉成有意義的字符    
            3.在正則表達式中可以直接使用一些代表范圍的原子
                \d  :表示任意一個十進制的數字  [0-9]
                \D  :表示任意一個除了數字外的字符   [^0-9]
                \s  :表示任意一個空白字符。空格、\n\r\t\f  [\n\r\t\f ]
                \S  :表示任意一個非空白字符     [^\n\r\t\f ]
                \w  :表示任意一個字。a-zA-Z0-9_     [a-zA-Z0-9_]
                \W  :表示任意一個非字。除了a-zA-z0-9_     [^a-zA-Z0-9_]
            4.自己定義一個原子表[],可以匹配方括號中的任何一個原子
                例:[0-5p-z]
        3.元字符  * ?
            元字符是一種特殊的字符,是用來修飾原子用的,不可以單獨使用
            *   :表示其前面原子可以出現的次數 0次、1次、或多次      {0,}
            +   :表示其前面的原子出現1次或多次,不能沒有至少一次    {1,}
            ?   :表示其前面的原子出現0次或1次,有只能一次,要麼沒有   {0,1}
            {}  :用於自己定義前面的原子出現的次數
                        {m}    m表示一個整數, {5}表示前面的原子出現5次
                        {m,n}  m和n表示整數,{2,5}表示前面的原子出現2-5次
                        {m,}   表示前面的原子至少出現m次
            .   :默認情況下,表示除換行符外的任意一字符
            ^   :直接在一個正則表達式的第一個字符出現,則表示字符串必須以這個正則表達式開始
            $   :直接在一個正則表達式的最後字符出現,則表示字符串必須以這個正則表達式結尾
            |   :表示或的關系,它的優先級是最低的,最後考慮它
            \b  :表示一個邊界
            \B  :表示一個非邊界
            重點  ()  :
                    1.()作用:是作為大原子使用
                    2.改變優先級
                    3.作為子模式使用,正則表達式不光對一個字符串匹配一次,全部匹配作為一個大模式,放在數組的第一個元素中,每個()是一個子模式按順序放到數組的其他元素中去
                    4.可以取消子模式,就將()作為大原子或改變優先級使用,在大括號中最前面使用?:就可以取消這個()表示的子模式
                    5.反向引用,可以在模式中直接將子模式取出來,再作為正則表達式模式的一部分,如果是在正則表達式像替換函數preg_replace函數中,可以將子模式取出,在被替換的字符串中使用
                        \1取第一個子模式  \2取第二個子模式。。。。。

<?php
$pattren="/((?:\d{4})\W\d{2}\W\d{2})\s+((\d{2})\W\d{2}\W\d{2})\s+(am|pm)/";
$string="today is 2016-08-09 15:30:00 pm...";
if(preg_match($pattren,$string,$arr)){
    echo "正則表達式<b>{$pattren}<b>和字符串<b>{$string}<b>匹配成功<br>";
    echo '<pre>';
    print_r($arr);
    echo '</pre>';
}else{
    echo "<font color='red'>正則表達式{$pattren}和字符串{$string}匹配失敗</font>";
}
?>

 


        4.模式修正符號 i u
            "//模式修正符號"
            1.可以一次使用一個,每一個都具有一定的意義,也可以連續使用多個
            2.是對整個正則表達式的調優使用,也可以說是對正則表達式功能的擴展

            例;"/abc/"   只能匹配小寫字母 abc
                "/abc/i"   可以不區分大小寫的匹配


            i :表示在和模式進行匹配時不區分大小寫
            m :默認情況下,PCRE 將目標字符串作為單一的一“行”字符所組成的(甚至其中包含有換行符也是如此)。“行起始”元字符(^)僅僅匹配字符串的起始,“行結束”元字符($)僅僅匹配字符串的結束,或者最後一個字符是換行符時其前面(除非設定了 D 修正符)
                當設定了此修正符,“行起始”和“行結束”除了匹配整個字符串開頭和結束外,還分別匹配其中的換行符的之後和之前。這和 Perl 的 /m 修正符是等效的。如果目標字符串中沒有“\n”字符或者模式中沒有 ^ 或 $,則設定此修正符沒有任何效果
            s :如果沒有使用這個模式修正符時,元字符中的“.”就不能匹配換行符,使用後就可以了。
            x :表示模式中的空白忽略不計
            e : 如果設定了此修正符,preg_replace() 在替換字符串中對逆向引用作正常的替換,將其作為 PHP 代碼求值,並用其結果來替換所搜索的字符串。
                只有 preg_replace() 使用此修正符,其它 PCRE 函數將忽略之。
            A :如果設定了此修正符,模式被強制為“anchored”,即強制僅從目標字符串的開頭開始匹配。此效果也可以通過適當的模式本身來實現
            Z :
            U :本修正符反轉了匹配數量的值使其不是默認的重復,而變成在後面跟上“?”才變得重復。這和 Perl 不兼容。也可以通過在模式之中設定 (?U) 修正符或者在數量符之後跟一個問號(如 .*?)來啟用此選項。

        /原子核元字符/模式修正符號         /為定界符

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved