PHP正則表達式基本語法


本章主要學習正則表達式的基本語法;

正則表達式就是一個匹配的模式,正則表達式本身也就是一個字符串(有一些語法規則,特殊符號組成)

正則表達式這個字符串一定要在對應的函數中使用才有意義(分割,替換函數結合使用)

1、定界符   / /

2、原子    最小的一個匹配單元(放在 / / 中,在正則表達式中,至少有一個。例如:$reg = '/ 7 /' )

3、元字符   元字符是不能單獨使用的,用來修飾元子的,用來擴展原子功能和限字的做補充說明(協助定界符中 例如:$reg = '/{5}/' )

4、模式修正符  修正,對模式(正則)修正(寫在定界符的外面,寫在右邊 例如: $reg = '/ {5} / i ' 中的i)

 

一、界定符號

  界定符就表示一個正則表達式的開始和結束

  例如:/[0-9]/   |  #[0-9]#  | {[0-9]}  常用寫法建議使用斜杠;//  $pattern = '/[0-9]/'

二、原子

       可見原子:

    1、標點符號; ‘’  _ ? . 等等

    2、英文字母數字 a-z, A-Z, 0-9

    3、漢語,日文,阿拉伯文等其他文字

    4、數理化公司符號

    5、其他可見字符

  不可見原子:

    1、換行符 \n

    2、回車 \r

    3、制表符 \t

    4、空格

    5、其他看不見的符號

  (所有的數字,所有的字,所有的空白,所有的字母,特殊符號 如下)

  .  匹配除換行符之外的任意字符

  \d  (所有的數字) 代表任意一個數字   [ 0-9 ]

  \D (代表所有非數字) 代表任何一個非數字 [ ^0-9 ]  

  \w 代表任意一個字,a-z A-Z, 0-9 _    [ a-zA-Z0-9_]

  \W 代表任意一個非字,a-z A-Z 0-9 _ 之外的所有字符   [ ^ a-zA-Z0-9_ ]

  \s  代表空白    [ \t \n \f \v ]

  \S 代表任意一個非空白  [^ \t \n \f \v ]

  自定義原子表

    [ 13579 ] 

    [ a-zA-Z]     說明:- 是從哪到哪

    [ ^a-zA-Z ]  說明: ^ 是除了什么

  說明:( . ) 點, 能代表所有的一個原子

三、元字符

  元字符這個不能在正則表達式中單獨使用,用來修飾原子的

  元字符 即原子的篩選方式

  * 用來修飾前面的原子可以出現 0 個 1 個 或者 多個

  + 用來修飾前面的原子出現的次數 1 次 或 多次 (不能沒有一次)

  ?用來修飾前面的原子出現的次數 0 次 或 1次

  { m }  用來修飾前面的原子出現 m 次,多一次少一次都不行

  { n, m } 用來修飾前面的原子出現的個數,在 n 到 m 之間,包含 n, m

  { n, } 用來修飾前面的原子可以出現至少 n 次,包含 n

  |  或的關系,表示它兩邊的原子,只有有一個出現就可以,但是 | 的優先級最低

  ^ 和 \A 表示必須以什么開始,必須寫在正則表達式的前面

  $ 和 \Z 表示必須以什么結束,必須寫在正則表達式的后面

  \b  單詞邊界

  \B  非單詞邊界

 ()第一個作用:改變優先級別

    $str = ' orisaabc';

    $reg = '/ or(is|a)abc/';

   第二個作用:將小原子變成大原子

    $str = 'sqlsalabcsqlddfd';

    $reg = '/(sql)*/';

      第三個作用:子模式,整個表達式是一個大模式,小括號中的是每一個獨立的子模式

      第四個作用:反向引用

 ?: 取消子模式,作為大模式用(?:\d{4})

 \1 取子模式

四、模式修正符

  模式修正符要放在定界符之外,放在右邊,模式修正符一個字符就是一個功能,可以組合使用;

  例如: “/ go*gle/ i ”;     "/go*gle/ ieu";

  作用:

    模式修正符號可以修正正則表達式的解釋,或者擴充正則表達式的功能;

  i    不區分大小寫(默認是區分大小寫)

  m  修正符號修正正則表達式可以視為多行,在使用 ^ 或 $ 時每一行滿足都可以(默認為一行)

  s   用來修正正則表達式中的換行符號,是包含換行符,不用 s 則不包含換行符,默認不包含換行符

  x   忽略修正正則表達式可以省略多個單詞之間的空白

  U   (.* , .+) 正則表達式比較貪婪,.*?  和  .+?可以取消貪婪

  貪婪的案例:

$pattern = '/myistest.+123/';
$subject = 'you look myistest__123123123123';
$matche = [];
preg_match($pattern, $subject, $matche);
show($matche);

  貪婪的結果:

Array
(
    [0] => myistest__123123123123
)

  取消貪婪的大U:

$pattern = '/myistest.+123/U';
$subject = 'you look myistest__123123123123';
$matche = [];
preg_match($pattern, $subject, $matche);
show($matche);

  取消貪婪的結果:

Array
(
    [0] => myistest__123
)

  忽略大小寫的案例:i 的用法

$pattern = '/myisTest.+123/Ui';
$subject = 'you look myistest__123123123123';
$matche = [];
preg_match($pattern, $subject, $matche);
show($matche);

  輸出結果同上;不加 i 是匹配不到結果的;

  忽略空白符的案例: x 的使用

$pattern = '/m yi s Test.+123/Uix';
$subject = 'you look myistest__123123123123';
$matche = [];
preg_match($pattern, $subject, $matche);
show($matche);

  輸出結果同上,不加 x 是匹配不到結果的;

五、實戰應用

  1、非空匹配  ‘/.+/’

  2、浮點數匹配(保留2位)‘/(?!0\.00)(\d+\.\d{2}$)/’  

$subject = ['1.00', '2.345', '0.23', '234', '23.22', '0.00'];
$matche = [];
for ($i = 0; $i < count($subject); $i++){
    if(preg_match('/(?!0\.00)(\d+\.\d{2}$)/', $subject[$i], $matche)){
        show($matche);
    }
}

  結果:

Array
(
    [0] => 1.00
    [1] => 1.00
)
Array
(
    [0] => 0.23
    [1] => 0.23
)
Array
(
    [0] => 23.22
    [1] => 23.22
)

  3、手機號碼  ‘/^1(3|4|7|8)\d{9}$/’

  4、Email地址 ‘/^([0-9A-Za-z\\-_\\.]+)@([0-9a-z]+\\.[a-z]{2,3}(\\.[a-z]{2})?)$/i’    或者   ‘/^\w+(\.\w+)*@\w+(\.\w+)+$/’

  5、常見URL地址  '/^(https?://)?(\w\.)+[a-zA-Z]+$/'

  

  

  注:學習筆記

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM