php教程 pcreRegex完全教程
預定義常量
preg_pattern_order
結果按照”規則”排序, 僅用於preg_match_all, 即$matches[0]是完整規則的匹配結果, $matches[1]是第一個子組匹配的結果
preg_set_order:
結果按照”集合”排序, 僅用於preg_match_all, 即$matches[0]儲存第一次匹配結果的所有結果(包含子組)資訊, $matches[1]儲存第二次的結果資訊
preg_offset_capture
在捕獲的結果中, 不僅包含結果子串, 還會包含子串在原字串中的位置.
preg_split_no_empty
告知preg_split僅返回非空的部分
preg_split_delim_capture
告知preg_split同時捕獲規則中的括號運算式匹配到的內容
preg_split_offset_capture
如果設定了這個標記, 每次匹配得到的結果的offset位置將會被同時返回.
preg_no_error
如果preg_last_error調用後返回此值, 則表明正則沒有錯誤
preg_internal_error
如果preg_last_error調用後返回此值, 則表明發生了pcre內部錯誤
preg_backtrack_limit_error
如果回溯次數超過預設的值, preg_last_error函數返回此值
preg_recursion_limit_error
如果遞迴次數超過預設的值, preg_last_error函數返回此值
preg_bad_utf8_error
如果preg的最後錯誤是由於異常的utf-8資料(僅在運行在utf-8模式Regex情況下)導致的, 那麼preg_last_error返回此值
preg_bad_utf8_offset_error
如果位移量與合法的utf-8代碼(僅在運行在utf-8模式Regex情況下)的開始點不匹配, preg_last_error的調用返回此值
pcre_version
返回pcre版本號碼和發布日期.
模式修飾符
i pcre_classes
大小寫不敏感的修飾符
m pcre_multiline
多行匹配, 預設情況下, pcre認為目標字串是一組單行字元組成的(然而實際上它可能會包含多行). 元字元^僅匹配字串的開始位置, 而元字元$則僅匹配字串的末尾, 或者新行之前(除非設定了d修飾符). 這個修飾符和perl中工作一直, 使用後, ^和$會匹配每一行的開始和結尾
如果目標字串中沒有n字元或者模式中沒有出現^和$, 則設定此修飾符是沒有任何影響的.
s pcre_dotall
用來增強字元類.(點號)的功能, 預設情況下, 點號匹配任一字元, 但不包括分行符號及以後內容. 使用此修飾符後, 可以匹配任一字元包括分行符號
x pcre_extended
如果設定了這個修飾符, 模式中的空白字元, 除非被轉義或者在一個字元類中, 否則都被忽略. 在一個未轉義的#之後直到下一個分行符號之間的內容都會被Regex引擎忽略以方便添加註釋.
e preg_replace_eval
使用此修飾符後, preg_replace的$replacement參數除了可以使用正常的反向引用來取得匹配值, 還可以在其中書寫eval文法允許的字串進行求值, 並將返回結果用於最終的替換.
a pcre_anchored
如果設定了此修飾符, 模式被強製成為”anchored”(錨點), 也就是說約束使其始終從字串的嘴前面開始搜尋. 這個影響也可以通過構造適當的規則來實現(perl中只能這樣實現)
d pcre_dollar_endonly
如果設定了這個修飾符, $會匹配目標字串的結尾之前, 而如果沒有設定這個修飾符, 如果目標字串最後一個字元時分行符號, $就會匹配該分行符號之前而不是字串結尾之前.
如果設定了m修飾符, 則這個修飾符會被忽略. 這一點和perl不一致
s
當一個模式需要多次使用的時候, 我們為了獲得更高的匹配效率, 值得花費一些時間對其進行分析. 如果設定了這個修飾符, 將會進行這個額外的分析. 當前, 這種對一個模式的分析僅僅適用於非錨點的匹配(即沒有一個單一固定的開始字元)
u pcre_ungreedy
這個修飾符逆轉了貪婪的模式, 如果沒有這個設定, 預設情況下的正則匹配時貪婪的, 量詞後增加了?的模式是非貪婪的, 但是如果設定了這個修飾符, 則剛好相反.
這個規則與perl是不相容的.
也可以在模式中使用?u來達到同樣的效果
x pcre_extra
這個修飾符啟用了一個pcre中與perl不相容的額外功能. 任意反斜線後面跟一個沒有特殊含義的字元會導致一個錯誤, 以此來保留這些組合以備後期擴充.
預設情況下, 和perl一樣, 反斜線後跟一個沒有特殊含義的字元會以該字元原意解釋.
當前沒有任何其他特性受此修飾符控制
j pcre_info_jchanged
與內部選項?j相同, 用來改變本地pcre_dupnames選項. 允許子組有重複的名字
u pcre8
這個修飾符開啟一個pcre中與perl不相容的額外功能. 模式字串被認為是utf-8的.