在結束分隔符之後可以跟隨多種模式修飾符 (用php 的術語來說,叫做 pattern modifier),
在某些情況下,修飾符也可以出現在正則表達式內部,修飾模式的某些性質。我們已經在一些例子中看到過表達不區分大小寫的模式修飾符 i 。下面簡要介紹模式修飾符:
修飾符
表達式中的寫法
說明
i
(?i)
Ø 忽略大小寫
m
(?m)
Ø 增強行錨點模式
s
(?s)
Ø 點號通配模式
x
(?x)
Ø 寬松排列和注釋模式
u
Ø 以UTF-8讀取正則表達式和目標字符串
X
(?X)
Ø 啟用PCRE “額外功能(extra stuff)”
e
Ø 將replacement作為PHP代碼(只用於preg_replace)
S
Ø 啟用PCRE的“study”優化嘗試
下面三個很少用到
U
(?U)
Ø 交換 "*"和"*?"的匹配優先含義
A
Ø 將整個匹配嘗試錨定在起始位置
D
Ø "$1" 只能匹配EOS,而不是EOS之前的換行符
(如果使用了模式修飾符m則不會這樣)
表達式內部的模式修飾符
在正則表達式內部,模式修飾符可以單獨出現,來啟用或停用某些特性(例如用"(?i)"來啟用不區分大小寫匹配,用"(?-i)"來停用。此時,它們的作用范圍持續到對應的結束括號,如果不存在,就持續到正則表達式的末尾。
它們也可以用作模式修飾范圍 例如 "(?i...)" 表示對此括號內的內容進行不區分大小寫匹配"(?-sm:...)" 表示在此范圍內停用s和m模式.
正則表達式之外,結束分隔符之後的模式修飾符可以以任何順序組織,下例中的‘si’表示同時啟用不區分大小寫和點號通配模式:
If(preg_match('{<title>(.*?)</title>}si',$html,captures))
摘自lostwolf's Blog