正則表達式Regular Expression,使用單個字符串來描述、匹配一系列符合某個句法規則的字符串。代表性書籍《正則表達式之道》裡面有詳細論述,本書籍為個人查閱之用力求精簡、明確、方便使用,只對必要概念做補充性說明。
正則表達式本身即是一個字符串,需要一組界定符區分出哪裡是正則表達式的內容。//和##和{},都是界定符,在PHP語言中用//作為正則表達式的界定符。一般不建議用{}做界定符,因為{}本身也可以是正則表達式的元字符,容易混淆。
| 匹配兩個或者多個分支選擇
[] 匹配方括號中任意的原子
[^] 匹配方括號中原子之外的任意字符,相當於[]的非
. 匹配除換行符之外的任意一個字符
\d 匹配任意一個十進制的數字,即[0-9]
\D 匹配任意一個非十進制的數字,即[^0-9]
\s 匹配任意一個不可見原子(空白符),即[\f\n\r\t\v]
\S 匹配任意一個非不可見原子(空白符),即[^\f\n\t\v]
\w 匹配任意一個數字、字母或者下劃線,即[0-9a-zA-Z_]
\W 匹配任意一個非數字、字母、或者下劃線,即[^0-9a-zA-Z_]
{n} 前面原子恰好重復n次
{n,} 前面原子重復>=n次
{n,m} 前面原子重復大於等於n次,小於等於m次
*重復0次或者更多次
+重復1次或者更多次
?重復0次或者1次
() 匹配括號內的原子集合作為一個原子看待
\b 匹配單詞的開始或者結束位置
^ 匹配字符串的開始位置
$ 匹配字符串的結束位置
\G 匹配上一個匹配的結尾(本次匹配的開始)
\A 匹配字符串開頭(類似^,但是不受處理多行選項的影響)
\Z 匹配字符串的結尾或者行尾(不受處理多行選項的影響)
\z 匹配字符串的結尾(類似$,但是不受處理多行選項的影響)
貪婪匹配,匹配結果存在歧義時取其長(PHP中為默認模式)
懶惰匹配,匹配結果存在歧義時取其短
U 修正為懶惰模式
i 忽略英文字母大小寫
x 忽略空白符
s 讓元字符 . 匹配任意字符包括換行符
e 如果設定了此修正符,preg_replace() 在替換字符串中對逆向引用作正常的替換,將其作為 PHP 代碼求值,並用其結果來替換所搜索的字符串
正則中的元字符都要加\進行轉義:
$ ( ) * + . [ ] ? \ ^ { } |
.+
1[34578]\d{9}
^\w+(.w+)*@\w+(.w+)+$
^(https?://)?(\w+.)+[a-zA-Z]+$