PHP擴(kuò)展之文本處理(二)——PCRE正則表達(dá)式語法7——內(nèi)部選項(xiàng)設(shè)置
PCRE_CASELESS,?PCRE_MULTILINE,?PCRE_DOTALL,?PCRE_UNGREEDY,PCRE_EXTRA,?PCRE_EXTENDED?and PCRE_DUPNAMES 等模式修飾符設(shè)置可以在模式內(nèi)部通過一個(gè) perl 選項(xiàng)字符序列來設(shè)置, 語法為:(?修飾符),可用的修飾符有:
Internal option lettersifor?PCRE_CASELESSmfor?PCRE_MULTILINEsfor?PCRE_DOTALLxfor?PCRE_EXTENDEDUfor?PCRE_UNGREEDYXfor?PCRE_EXTRAJfor?PCRE_INFO_JCHANGED比如,(?im) 設(shè)置表明多行大小寫不敏感匹配。同樣可以用它來取消這些設(shè)置, 比如 (?im-sx) 設(shè)置了PCRE_CASELESS,PCRE_MULTILINE, 但是同時(shí)取消了?PCRE_DOTALL?和?PCRE_EXTENDED。 如果一個(gè)字母即出現(xiàn)在 - 之前, 也出現(xiàn)在 - 之后,這個(gè)選項(xiàng)被取消設(shè)置。
當(dāng)一個(gè)選項(xiàng)在模式的最上級(也就是說不在子組中)時(shí), 這個(gè)改變會影響模式中剩余部分。比如?/ab(?i)c/?僅僅匹配 ”abc” 和 ”abC”。 這個(gè)形式在 PCRE 4.0(PHP 4.3.3) 中被改變。在此之前的版本中, /ab(?i)c/ 行為和 /abc/i 完全一致。
如果一個(gè)選項(xiàng)在子組中設(shè)置,產(chǎn)生的影響是不同的。這是 perl 5.005 中行為的一個(gè)變種。 一個(gè)選項(xiàng)在子組內(nèi)部設(shè)置,僅僅改變子組中剩余的部分, 因此?(a(?i)b)c?僅僅匹配 ”abc” 和 ”aBc” (假設(shè)沒有使用?PCRE_CASELESS?選項(xiàng))。 這就意味著選項(xiàng)在模式的不同位置可以造成不同的影響。 在同一個(gè)子模式中, 一個(gè)分支的選項(xiàng)設(shè)置回穿透到后面剩余的其他分支中去。 比如?(a(?i)b|c)?匹配”ab”, “aB”, “c” 和 ”C”。 盡管在匹配 ”C” 時(shí)第一個(gè)分支會在選項(xiàng)被設(shè)定前就被丟棄。 這是因?yàn)檫x項(xiàng)的設(shè)定是在編譯期確定的,否則可能會帶來非常怪異的行為。
PCRE 專用選項(xiàng)?PCRE_UNGREEDY?和?PCRE_EXTRA?可以和 perl 兼容選項(xiàng)以同樣的方式來改變, 分別使用字母 U 和 X. (?X) 標(biāo)記設(shè)定有些特殊,它必須出現(xiàn)在任何其他特性之前, 最好放在最開頭的位置。
相關(guān)文章:
1. 在Android中使用WebSocket實(shí)現(xiàn)消息通信的方法詳解2. 淺談python出錯(cuò)時(shí)traceback的解讀3. Python importlib動態(tài)導(dǎo)入模塊實(shí)現(xiàn)代碼4. python matplotlib:plt.scatter() 大小和顏色參數(shù)詳解5. windows服務(wù)器使用IIS時(shí)thinkphp搜索中文無效問題6. ASP 信息提示函數(shù)并作返回或者轉(zhuǎn)向7. Nginx+php配置文件及原理解析8. 利用promise及參數(shù)解構(gòu)封裝ajax請求的方法9. .NET中l(wèi)ambda表達(dá)式合并問題及解決方法10. JSP數(shù)據(jù)交互實(shí)現(xiàn)過程解析
