是一組描述字符串特徵的字符
用來檢查一個串是否含有某種子串、將匹配的子串作替換或者從某個串中取出符合某個條件的子串等
使用斜槓做爲定界符,如 /[-a-z]/。正則表達式分爲普通字符和元字符,普通字符分爲打印字符和非打印字符,打印字符包括字母字符、數字、標點及一些其餘符號,非打印字符指打印到紙張上後不可見的字符,包括空格符、回車符、製表符、垂直製表符、換行符、換頁符等。元字符指在正則表達式中有特殊含義的字符包括定界符、定位符、限定符、轉義符、選擇符等。
限定符用來限定元素出現的次數,有 ? + * {n} {n,} {n,m} 共6種。限定符的默認模式是貪婪模式,貪婪模式會盡量多的匹配字符,在它們的後面加上一個?就會變成非貪婪模式,非貪婪模式會盡量少的匹配字符,如php
$subject='< a1>expressions< a1>'; $pattern='/<.*>/'; $res=preg_match_all($pattern, $subject,$matches); echo $matches[0][0];//結果爲 < a1>expressions< a1> $res=preg_match_all('/<.*?>/', $subject,$matches); echo $matches[0][0];//結果爲 < a1>
用來描述字符串或單詞的邊界,也就是指單詞和空格間的位置,^和$分別指字符串的開始與結束,\b描述單詞的前或後邊界,\B表示非單詞邊界。不能對定位符使用限定符。例如, 'er\b' 能夠匹配"a never aa" 中的 'er',但不能匹配 "a verb" 中的 'er'。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。正則表達式
圓括號用來使被括起來的部分最爲一個總體存在,能夠用限定符修飾,如 (aa)* ,同時被括起來的部分也會成爲一個子表達式被緩存起來用於後面的引用,如 (aa)b\1能夠匹配 aabaa或aabaac,另外引用時最大隻能到\99,意思就是緩衝區最多隻能放99個子表達式,若是不須要進行引用則能夠用?:禁用緩存,如 'industr(?:y|ies) 就是一個比 'industry|industries' 更簡略的表達式 。其中?:是非捕獲元字符之一,還有兩個非捕獲元字符是?=和?!(?=pattern) 正向預查,在任何匹配 pattern 的字符串開始處匹配查找字符串。這是一個非獲取匹配,也就是說,該匹配不須要獲取供之後使用。例如,'Windows (?=95|98|NT|2000)' 能匹配 "Windows 2000" 中的 "Windows" ,但不能匹配 "Windows 3.1" 中的 "Windows"。預查不消耗字符,也就是說,在一個匹配發生後,在最後一次匹配以後當即開始下一次匹配的搜索,而不是從包含預查的字符以後開始;
(?!pattern) 負向預查,在任何不匹配 pattern 的字符串開始處匹配查找字符串。這是一個非獲取匹配,也就是說,該匹配不須要獲取供之後使用。例如'Windows (?!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows",但不能匹配 "Windows 2000" 中的 "Windows"。預查不消耗字符,也就是說,在一個匹配發生後,在最後一次匹配以後當即開始下一次匹配的搜索,而不是從包含預查的字符以後開始
express
由高到低依次爲 轉義符、圓括號和方括號、限定符、定位符和普通字符、"或"操做符,如,普通字符具備高於替換運算符的優先級,使得"m|food"匹配"m"或"food"。若要匹配"mood"或"food",請使用括號建立子表達式,即"(m|f)ood"數組
preg_quote - 轉義正則表達式字符
preg_match — 執行正則表達式
preg_match_all - 執行一個全局正則表達式
preg_replace - 執行一個正則表達式並替換匹配內容
preg_filter 等價於preg_replace() 除了它僅僅返回(可能通過轉化)與目標匹配的結果
preg_replace_callback - 執行一個正則表達式搜索而且使用一個回調進行替換
preg_replace_callback_array - 執行一個正則表達式搜索而且使用一個回調進行替換
preg_split - 經過一個正則表達式分隔字符串
preg_last_error - 返回最後一個PCRE正則執行產生的錯誤代碼
preg_grep 返回給定數組input中與模式pattern匹配的元素組成的數組
strpos - 僅檢查某個字符串是否包含另一個字符串緩存