第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)限定符
所謂限定符,就是限定乙個原子必須出現多少次:* + ?
*:代表乙個原子出現0次或者多次
+:代表乙個原子出現1次或者多次
?:代表乙個原子要麼出現1次,要麼出現0次
:前面的原子出現幾次
:前面的原子至少出現n次
:前面的原子至少出現n次,最多m次
*:+:
?:2)邊界限定符
^:字串是否以某乙個字串開頭
$:字串是否以某乙個字串結尾
\b和\b
\b :是邊界
\b : 不是邊界
3)點.
可以匹配任何乙個除了換行符以外的字元
4)模式選擇符 |
5) 模式單元
所謂模式單元,就是可以使用()將多個原子組合成乙個更大的原子
one:將小原子組合成了乙個大原子
two:改變元字元的優先順序
three:開啟了獨立的模式,會將小括號裡面的內容存入到緩衝區裡面
被存入到緩衝區裡面的內容可以通過\1 \2 \3來進行反向引用
緩衝區是可以被跳過的,通過乙個?:來跳過緩衝區
6)元字元的優先順序
④ 模式修正符
所謂模式修正符,是對正規表示式功能的一種擴充,增強了正規表示式的處理能力,模式修正符一般是寫在定界符外面
i:忽略大小寫
m:可以匹配多行,換句話說,可以多行查詢
s:主要功能是用來增強點. 的功能
x:可以忽略空格
正規表示式函式
preg_match():檢視乙個字串是否和乙個正規表示式匹配,匹配就返回true,否則返回false
preg_grep():接受兩個引數,乙個是正規表示式,乙個是陣列,將符合條件的元素提出來返回乙個新的陣列,返回的新陣列裡面的元素下標不變
preg_repalce(正則,替換的字串,原來的字串)
除了使用正則的方式,使用字串替換函式也是可以實現字串替換的
str_replace(「要替換的字串」,「新的字串」,要操作的字串,[替換的次數])
使用正則和字串替換函式都可以實現字串的替換,但是正則的功能比字串替換函式要強大一些,但是功能強大的背後,是效率會降低
如果可以是字串替換函式搞定的事兒,就不要去用正則
字串分割
preg_split()
字串處理
explode(分隔符,字串)
implode():將乙個陣列組合成乙個字串
implode(連線符號,陣列)
正規表示式 正規表示式 總結
非負整數 d 正整數 0 9 1 9 0 9 非正整數 d 0 負整數 0 9 1 9 0 9 整數 d 非負浮點數 d d 正浮點數 0 9 0 9 1 9 0 9 0 9 1 9 0 9 0 9 0 9 1 9 0 9 非正浮點數 d d 0 0 負浮點數 正浮點數正則式 英文本串 a za z...
正規表示式 表示式
網域名稱 a za z0 9 a za z0 9 a za z0 9 a za z0 9 interneturl a za z s 或 http w w w 手機號碼 13 0 9 14 5 7 15 0 1 2 3 5 6 7 8 9 18 0 1 2 3 5 6 7 8 9 d 號碼 x x x...
Linux正規表示式 編寫正規表示式
為了所有實用化的用途,你可以通過使用程式產生正確的結果。然而,並不意味著程式總是如你所願的那樣正確地工作。多數情況下,如果程式不能產生想要的輸出,可以斷定真正的問題 排除輸入或語法錯誤 在於如何描述想要的東西。換句話說,應該考慮糾正問題的地方是描述想要的結果的表示式。表示式不完整或者公式表示得不正確...