標籤:保留 含義 搜尋 單行 ati greedy 實現 代碼 regexp
i (PCRE_CASELESS)
如果設定了這個修飾符, 模式中的字母會進行大小寫不敏感匹配.
m (PCRE_MULTILINE)
預設情況下, PCRE認為目標字串是由單行字元組成的(然而實際上它可能會包含多行), "行首"元字元(^)僅匹配字串的開始位置, 而"行末"元字元($)僅匹配字串末尾, 或者最後的分行符號(除非設定了D修飾符). 這個行為和perl相同. 當這個修飾符設定之後, "行首"和"行末"就會匹配目標字串中任意分行符號之前或之後, 另外, 還分別匹配目標字串的最開始和最末尾位置. 這等同於perl的/m修飾符. 如果目標字串 中沒有"\n"字元, 或者模式中沒有出現^或$, 設定這個修飾符不產生任何影響.
s (PCRE_DOTALL)
如果設定了這個修飾符, 模式中的點號元字元匹配所有字元, 包含分行符號. 如果沒有這個 修飾符, 點號不匹配分行符號. 這個修飾符等同於perl中的/s修飾符. 一個取反字元類比如 [^a]總是匹配分行符號, 而不依賴於這個修飾符的設定.
x (PCRE_EXTENDED)
如果設定了這個修飾符, 模式中的沒有經過轉義的或不在字元類中的空白資料字元總會被忽略, 並且位於一個未轉義的字元類外部的#字元和下一個分行符號之間的字元也被忽略. 這個修飾符 等同於perl中的/x修飾符, 使被編譯模式中可以包含注釋. 注意: 這僅用於資料字元. 空白字元 還是不能在模式的特殊字元序列中出現, 比如序列(?(引入了一個條件子組(譯註: 這種文法定義的 特殊字元序列中如果出現空白字元會導致編譯錯誤. 比如( ?(就會導致錯誤.).
e (PREG_REPLACE_EVAL)
如果這個修飾符設定了, preg_replace()在進行了對替換字串的 後向引用替換之後, 將替換後的字串作為php代碼評估執行(eval函數方式), 並使用執行結果 作為實際參與替換的字串. 單引號, 雙引號, 反斜線(\)和NULL字元在後向引用替換時會被用反斜線轉義.
Tip
請確保replacement參數由合法php代碼字串組成, 否則php將會 在preg_replace()調用的行上 產生一個解釋錯誤.
Note: 僅 preg_replace()使用此修飾符, 其他PCRE函數忽略此修飾符.
A (PCRE_ANCHORED)
如果設定了這個修飾符, 模式被強製為"錨定"模式, 也就是說約束匹配使其僅從 目標字串的開始位置搜尋. 這個效果同樣可以使用適當的模式構造出來, 並且 這也是perl種實現這種模式的唯一途徑.
D (PCRE_DOLLAR_ENDONLY)
如果這個修飾符被設定, 模式中的元字元貨幣符號僅僅匹配目標字串的末尾. 如果這個修飾符 沒有設定, 當字串以一個分行符號結尾時, 貨幣符號還會匹配該分行符號(但不會匹配之前的任何分行符號). 如果設定了修飾符m, 這個修飾符被忽略. 在perl中沒有與此修飾符等同的修飾符.
S
當一個模式需要多次使用的時候, 為了得到匹配速度的提升, 值得花費一些時間 對其進行一些額外的分析. 如果設定了這個修飾符, 這個額外的分析就會執行. 當前, 這種對一個模式的分析僅僅適用於非錨定模式的匹配(即沒有單獨的固定開始字元).
U (PCRE_UNGREEDY)
這個修飾符逆轉了量詞的"貪婪"模式. 使量詞預設為非貪婪的, 通過量詞後緊跟?的方式可以使其成為貪婪的. 這和perl是不相容的. 它同樣可以使用 模式內修飾符設定(?U)進行設定, 或者在量詞後以問號標記其非貪婪(比如.*?).
Note:
在非貪婪模式, 通常不能匹配超過 pcre.backtrack_limit的字元.
X (PCRE_EXTRA)
這個修飾符開啟了PCRE與perl不相容的附件功能. 模式中的任意反斜線後就ingen一個 沒有特殊含義的字元都會導致一個錯誤, 以此保留這些字元以保證向後相容性. 預設 情況下, 在perl中, 反斜線緊跟一個沒有特殊含義的字元被認為是該字元的原文. 當前沒有其他特性由這個修飾符控制.
J (PCRE_INFO_JCHANGED)
內部選項設定(?J)修改本地的PCRE_DUPNAMES選項. 允許子組重名. (譯註:只能通過內部選項設定, 外部的/J設定會產生錯誤.)
u (PCRE8)
此修正符開啟一個與perl不相容的附加功能. 模式字串被認為是utf-8的. 這個修飾符 從unix版php 4.1.0或更高, win32版php 4.2.3開始可用. php 4.3.5開始檢查模式的utf-8合法性. This modifier turns on additional functionality of PCRE that is incompatible with Perl. Pattern strings are treated as UTF-8. This modifier is available from PHP 4.1.0 or greater on Unix and from PHP 4.2.3 on win32. UTF-8 validity of the pattern is checked since PHP 4.3.5.
轉自: http://blog.csdn.net/cjsyr_cjsyr/article/details/53688984
PHPRegex /i, /s, /x,/u, /U, /A, /D, /S等模式修飾符