本章主要學習正則表達式的基本語法;
正則表達式就是一個匹配的模式,正則表達式本身也就是一個字符串(有一些語法規則,特殊符號組成)
正則表達式這個字符串一定要在對應的函數中使用才有意義(分割,替換函數結合使用)
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]+$/'
注:學習筆記