第7章正則表達式
1. 什麼是正則表達式
正則表達式就是一種描述字符串結構的語法規則
2. 爲何須要正則表達式?
由於須要對用戶提交的信息進行驗證,若是不驗證的話,有可能用戶提交的就是垃圾信息
3. PHP裏面的正則表達式函數庫
在PHP裏面支持2套正則表達式函數庫,一套是POSIX,另一套是PCRE。比起POSIX,如今更多的是使用PCRE這一套正則表達式函數。緣由有兩個:PCRE函數庫的兼容性更好,而且效率高。
咱們的正則表達式若是不配合正則表達式函數的話,它就只是一個普通的字符串。因此正則表達式必定要配合正則表達式函數來使用
4. 正則表達式語法
任何一個正則表達式的組成無外乎由4個部分組成 ① 定界符 ② 原子 ③ 元字符 ④ 模式修正符
定界符
咱們所寫的正則表達式都須要放在定界符裏面。通常常見的定界符爲兩個斜槓//
可是,咱們的定界符不單單隻有// 任何除了數字,字母,反斜槓\ 之外的字符均可以成爲正則表達式的定界符
原子
原子是正則表達式裏面最基本的組成單位。換句話說,一個正則表達式裏面,能夠沒有元字符,能夠沒有模式修飾符,可是不能沒有原子。
原子大體能夠分爲5大類
1)普通字符做爲原子
所謂普通字符,就是大小寫字母,數字等字符
例如:
「/5/」 用於匹配字符串中是否有5這個字符出現
「/php/」 用於匹配字符串中是否有php這個字符串出現
2)特殊字符做爲原子
在正則表達式裏面,有一些字符是有特殊含義,例如* +?.
若是咱們就只想匹配普通的*+?. 的話,必須轉義。轉義字符是一個反斜槓\
3)非打印字符做爲原子
所謂非打印字符,就是字符串中的控制符號,例如:空格,回車,製表符(Tab)
4)使用通用型字符做爲原子
所謂通用型字符,就是指一個原子能夠匹配多個字符。
\d:匹配任意一個十進制數字0-9
\D:匹配任意一個除了十進制之外的字符
\s:匹配任意一個非打印字符
\S:除了非打印字符之外的字符能夠被匹配上
\w:匹配字母數字和下劃線
\W:匹配除了數字,字母下劃線之外字符
5)自定義原子表做爲原子
自定義原子表經過一對[ ]
能夠在[]裏面加上一個^ 表明不能匹配方括弧裏面的字符
還能夠在方括弧裏面使用」 - 「 ,表明的是一個範圍
元字符
所謂元字符,就是用於構建正則表達式的具備特殊含義的字符。例如:+*?
1)限定符
所謂限定符,就是限定一個原子必須出現多少次:* + ? {n} {n,} {n,m}
*:表明一個原子出現0次或者屢次
+:表明一個原子出現1次或者屢次
?:表明一個原子要麼出現1次,要麼出現0次
{n}:前面的原子出現幾回
{n,}:前面的原子至少出現n次
{n,m}:前面的原子至少出現n次,最多m次php
*:{0,}
+:{1,}
?:{0,1}
2)邊界限定符
^:字符串是否以某一個字符串開頭
$:字符串是否以某一個字符串結尾
\b和\B
\b :是邊界
\B : 不是邊界
3)點.
能夠匹配任何一個除了換行符之外的字符
4)模式選擇符 |
5) 模式單元
所謂模式單元,就是可使用()將多個原子組合成一個更大的原子
One:將小原子組合成了一個大原子
Two:改變元字符的優先級
Three:開啓了獨立的模式,會將小括號裏面的內容存入到緩衝區裏面
被存入到緩衝區裏面的內容能夠經過\1 \2 \3來進行反向引用
緩衝區是能夠被跳過的,經過一個?:來跳過緩衝區
6)元字符的優先級
④ 模式修正符
所謂模式修正符,是對正則表達式功能的一種擴充,加強了正則表達式的處理能力,模式修正符通常是寫在定界符外面
i:忽略大小寫
M:能夠匹配多行,換句話說,能夠多行查找
S:主要功能是用來加強點. 的功能
X:能夠忽略空格
正則表達式函數
Preg_match():查看一個字符串是否和一個正則表達式匹配,匹配就返回TRUE,不然返回FALSE正則表達式
Preg_match_all():第一次匹配成功以後也不會像Preg_match()同樣中止搜索,而是會繼續日後面搜索符合要求的字符串數組
Preg_grep():接受兩個參數,一個是正則表達式,一個是數組,將符合條件的元素提出來返回一個新的數組,返回的新數組裏面的元素下標不變函數
Preg_repalce(正則,替換的字符串,原來的字符串)字符串
除了使用正則的方式,使用字符串替換函數也是能夠實現字符串替換的
Str_replace(「要替換的字符串」,「新的字符串」,要操做的字符串,[替換的次數])字符串處理
使用正則和字符串替換函數均可以實現字符串的替換,可是正則的功能比字符串替換函數要強大一些,可是功能強大的背後,是效率會下降
若是能夠是字符串替換函數搞定的事兒,就不要去用正則
字符串分割
Preg_split()
字符串處理
Explode(分隔符,字符串)
Implode():將一個數組組合成一個字符串
Implode(鏈接符號,數組)it