# 界定符
正則表達式本身即是一個字符串,需要一組界定符區分出哪里是正則表達式的內容。//和##和{},都是界定符,在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 代碼求值,并用其結果來替換所搜索的字符串
m 默認情況下, PCRE認為目標字符串是由單行字符組成的(然而實際上它可能會包含多行), "行首"元字符(^)僅匹配字符串的開始位置, 而"行末"元字符($)僅匹配字符串末尾,或者最后的換行符(除非設置了D修飾符). 這個行為和perl相同.當這個修飾符設置之后,"行首"和"行末"就會匹配目標字符串中任意換行符之前或之后,另外,還分別匹配目標字符串的最開始和最末尾位置.
# 轉義
正則中的元字符都要加\進行轉義:
`$ ( ) * + . [ ] ? \ ^ { } | `