這篇文章主要介紹了關於Php中的Regex,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下
簡單介紹Regex及其作用
Ø Regex的瞭解
n Regex就是描述字串排列模式的一種自訂語言規則
n 如果可以使用字串處理函數完成的任務,就不要使用Regex
n 有一些複雜性的操作,只能用Regex
n Regex也稱為一種模式運算式
n Regex就是通過具有特定規則的模式,在與輸入的字串資訊進行比較、分割、尋找、替換等操作。
Ø Regex的特點
n Regex也是一個字串
n 由具有特殊意義的字串組成的字串
n 具有一定編寫規則,也是一種模式
n 看做是一種程式設計語言:是用一些特殊字元,按照規則編寫出來一個字串,形成一種模式
注意:如果Regex不和函數一起使用,則就是一個字串,如果Regex放到某個函數中使用,才能發揮Regex的真正作用。
Ø PHP中提供了兩套Regex函數庫
Posix擴充Regexereg_開頭的函數
perl相容Regexpreg_開頭的函數
推薦使用prel 相容Regex函數庫
Regex的文法
Ø 正則定界符
Ø Regex中的原子
Ø Regex中的元字元
Ø Regex的模式修正符
正則定界符
正則的定界符就是用來聲明Regex邊界的符號。
Regex常用的邊界符為 /,實際上任何非數字字母以及反斜線\ 之外的任一字元都可以做Regex的邊界符。
注意:一個完整的Regex有兩個邊界符
n 一個是字串類型的引號邊界符 ''
n 一個是Regex的邊界符 //(一般用/)
n 整體就是 '//'
Regex的原子
組成Regex的最小單位就是原子
正則的數字字母都是原子,大部分不可見的字元也是原子。
例如:\n\r\t...這些轉譯字元都是元素
Ø 正則中原子
\d 表示 0-9之間的一個數字
\D 表示除了0-9之間的任意一個字元
\s 表示匹配任意一個空白字元包括 \n\r\t..
\S 表示除了空白符或者轉譯字元之外的任意一個字元
\w 表示大小寫字元數字以及底線當中任意一個字元
\W 表示除了大小寫字母數字以及底線之外的任意一個字元
Regex中的元字元(原子修飾符)
Ø [] 原子列表
表示在指定的字元中選擇一個原子
例如:[5-9] 表示5 6 7 8 9連續得字元允許縮寫為:[開始字元 -結束字元]
Ø [^] 排除清單
例如:[^4 ] 表示除了4之外的任意一個字元都可以
Ø 用元字元(原子修飾符)來類比原子
\d [0-9] \D [^0-9]
\s [\n\r\t] \S[^\n\r\t]
\w[a-zA-Z0-9] \W[^a-zA-Z0-9]
Ø 原子數量修飾符
? 表示前面的原子出現0次或者1次
+ 表示前面的原子出現1次或者多次
* 表示前面的原子出現0次或者多次
Ø 原子數量修飾列表
n {m,n} 表示前面的原子最小出現m次,最多出現n次
n {m,}表示前面的原子最少出現m次
n {m} 表示前面的原子只能出現m次
Ø 原子數量修飾列表類比數量修飾符
? {0,1}
+ {1,}
* {0,}
Ø 字串邊界修飾符
^ 表示以指定字元開頭的內容
$ 表示以指定字元結尾的內容
注意:
^ $一前一後表示精準修飾限定兩者之間的內容是否一致
u 如果要使用^和$ 可以匹配每一行的開始和結束部分,需要使用類比修正符m
Ø | 選擇修飾符
n 或與且類似
Ø () 模式單元
n 改變優先順序
n 將多原子視為一個原子,可以使用原子數量修飾符
n 將匹配到的括弧中的內容暫時存為記憶體中
n 如果使用()僅僅為了類比一個原子使用原子數量修飾符,那麼可以在括弧的開始處使用?: 來接觸存於內容的作用,提高效率
n 可以將括弧的內容在函數的輔助下進行反向引用操作
Ø 元字元
.(點)匹配除了\n之外的任意一個字元
Regex類比修正符
Ø i 忽略大小寫
Ø x 忽略Regex中得空白
Ø s 使用.(元字元)可以匹配到\n
Ø S 加速匹配
Ø U 模式 改變貪婪模式
改變貪婪模式,程式預設是貪婪模式,匹配最遠的結束為止,我們可以在正則中使用*?匹配任一字元的同時使用非貪婪模式
注意:如果此時程式為貪婪模式,使用U後,則程式變為非貪婪模式。如果此時程式為非貪婪模式,使用U後,程式變為貪婪模式
Regex的函數
Ø preg_grep() 返回與模式比對的數組單元
@param1:Regex
@param2:要匹配的數組
@param3:選擇性參數預設為false。設定為true表示返回與模式比對相反的數組單元
傳回值:返回與模式比對的數組單元
Ø preg_match() 進行一次正則匹配適合做查詢有沒有
@param1:Regex
@param2:要匹配的字串
@param3:選擇性參數,返回與Regex匹配的內容
傳回值:成功返回1,失敗返回0 1表示匹配的次數
Ø preg_match_all() 進行正則匹配 適合查詢有多少
@param1:Regex
@param2:要匹配的字串
@param3:選擇性參數,返回與Regex匹配的內容
傳回值:返回匹配的次數,如果沒有匹配帶則返回0
Ø preg_split() 用Regex分隔字串
@param1:Regex
@param2:要分隔的字串
@param3:返回分隔後的數組
Ø preg_replace() 執行Regex的替換
@param1:要尋找Regex
@param2:要替換的內容
@param3:在哪裡進行替換操作(數組還是字串)
傳回值:返回替換後的數組或者字串