PHP 正則表達式

什麼叫正則表達式

正則表達式是對字符串進行操作的一種邏輯公式

用一些特定的字符組合成一個規則字符串,稱之爲正則匹配模式

PHP中使用PCRE庫函數進行正則匹配,PCRE(Perl Compatible Regular Expressions)是一個Perl庫,包括 perl 兼容的正則表達式庫。

PHP 正則表達式:http://www.imooc.com/learn/350

javascript 正則表達式:http://www.imooc.com/learn/706

Python 正則表達式:http://www.imooc.com/learn/550

PCRE 庫函數 link

preg,代表“Perl的正則表達式(Perl Regular Expressions)”。

PHP中,ereg 已經逐漸被 preg 替代了

PCRE 庫函數 作用
preg_match 執行匹配正則表達式,常用來判斷一類字符模式是否存在。preg_match(reg, str[, match]);matches matches[0] 將包含完整模式匹配到的文本, $matches[1] 將包含第一個捕獲子組匹配到的文本,以此類推。
preg_match_all 執行一個全局正則表達式匹配,可以循環獲取一個列表的匹配結果數組
preg_filter 執行一個正則表達式搜索和替換
preg_grep 返回匹配模式的數組條目
preg_last_error 返回最後一個PCRE正則執行產生的錯誤代碼
preg_quote 轉義正則表達式字符
preg_replace_callback_array Perform a regular expression search and replace using callbacks
preg_replace_callback 執行一個正則表達式搜索並且使用一個回調進行替換
preg_replace 執行一個正則表達式的搜索和替換,preg_replace(pattern, replacement, $string);
preg_split 通過一個正則表達式分隔字符串

基本語法

PCRE庫函數中,正則匹配模式使用分隔符元字符組成

分隔符可以是非數字、非反斜線、非空格的任意字符。經常使用的分隔符是正斜線(/)、hash符號(#) 以及取反符號(~) (這裏比JS正則規則寬鬆?)

/^[0-9]$/
#^[0-9]$#
~^[0-9]$~

如果模式中包含分隔符,則需要用 \ 進行轉義,也可以採用preg_quote進行轉義。如果模式中包含較多的分割字符,建議更換其他的字符作爲分隔符。

$reg = /http:\/\//

$reg = 'http://';
$reg = '/' . preg_quote($p, '/') . '/';

分隔符後面可以使用模式修飾符,正則表達式中常用的模式修飾符有i、g、m、s、x、e等。它們之間可以組合搭配使用。

模式修飾符

模式修飾符 作用
i 不區分大小寫
g 全局匹配
m 將字符串視爲多行,不管是那行都能匹配
s 將字符串視爲單行,換行符作爲普通字符
x 將模式中的空白忽略
A 強制從目標字符串開頭匹配
D 如果使用$限制結尾字符,則不允許結尾有換行
U 只匹配最近的一個字符串,不重複匹配
e 配合函數preg_replace()使用,可以把匹配來的字符串當作正則表達式執行

元字符

元字符 作用
\ 一般用於轉義字符
^ 方括號外面,表示斷言目標的開始位置,但在方括號內部則代表字符類取反
$ 斷言目標的結束位置(或在多行模式下是行尾)
. 匹配除換行符外的任何字符(默認)
[ 開始字符類定義
] 結束字符類定義
| 或,開始一個可選分支
( 子組的開始標記
) 子組的結束標記
? 量詞,0 次或 1 次匹配
* 量詞,0 次或多次匹配
+ 量詞,1 次或多次匹配
{ 自定義量詞開始標記
} 自定義量詞結束標記,當我們確切的知道所匹配的字符長度的時候,可以使用{}指定匹配字符數。/\d{3}-\d{8}/
\w 查找單詞字符。字符 ( 字母 ,數字,下劃線_ )
\W 查找非單詞字符。
\d 查找數字。
\D 查找非數字字符。
\s 查找空白字符。空格
\S 查找非空白字符。
\b 匹配單詞邊界。
\B 匹配非單詞邊界。
\0 查找 NUL 字符。
\n 查找換行符。
\f 查找換頁符。
\r 查找回車符。
\t 查找製表符。
\v 查找垂直製表符。
\xxx 查找以八進制數 xxx 規定的字符。
\xdd 查找以十六進制數 dd 規定的字符。
\uxxxx 查找以十六進制數 xxxx 規定的 Unicode 字符。

貪婪模式與懶惰模式

正則表達式中每個元字符匹配一個字符

當使用 + 之後,它將匹配儘可能多的字符,既是貪婪模式。

但使用問號 ? 字符時,它將儘可能少的匹配字符,既是懶惰模式。

貪婪模式:在可匹配與可不匹配的時候,優先匹配

懶惰模式:在可匹配與可不匹配的時候,優先不匹配

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章