文章詳情頁(yè)
PHP擴(kuò)展之文本處理(二)——PCRE正則表達(dá)式模式修飾符
瀏覽:6日期:2022-09-16 09:03:20
下面列出了當(dāng)前可用的 PCRE 修飾符。括號(hào)中提到的名字是 PCRE 內(nèi)部這些修飾符的名稱。 模式修飾符中的空格,換行符會(huì)被忽略,其他字符會(huì)導(dǎo)致錯(cuò)誤。
i?(PCRE_CASELESS)如果設(shè)置了這個(gè)修飾符,模式中的字母會(huì)進(jìn)行大小寫(xiě)不敏感匹配。m?(PCRE_MULTILINE)默認(rèn)情況下,PCRE 認(rèn)為目標(biāo)字符串是由單行字符組成的(然而實(shí)際上它可能會(huì)包含多行), '行首'元字符 (^) 僅匹配字符串的開(kāi)始位置, 而'行末'元字符 ($) 僅匹配字符串末尾, 或者最后的換行符(除非設(shè)置了?D?修飾符)。這個(gè)行為和 perl 相同。?當(dāng)這個(gè)修飾符設(shè)置之后,“行首”和“行末”就會(huì)匹配目標(biāo)字符串中任意換行符之前或之后,另外, 還分別匹配目標(biāo)字符串的最開(kāi)始和最末尾位置。這等同于 perl 的 /m 修飾符。如果目標(biāo)字符串 中沒(méi)有 'n' 字符,或者模式中沒(méi)有出現(xiàn) ^ 或 $,設(shè)置這個(gè)修飾符不產(chǎn)生任何影響。s?(PCRE_DOTALL)如果設(shè)置了這個(gè)修飾符,模式中的點(diǎn)號(hào)元字符匹配所有字符,包含換行符。如果沒(méi)有這個(gè) 修飾符,點(diǎn)號(hào)不匹配換行符。這個(gè)修飾符等同于 perl 中的/s修飾符。 一個(gè)取反字符類(lèi)比如 [^a] 總是匹配換行符,而不依賴于這個(gè)修飾符的設(shè)置。x?(PCRE_EXTENDED)如果設(shè)置了這個(gè)修飾符,模式中的沒(méi)有經(jīng)過(guò)轉(zhuǎn)義的或不在字符類(lèi)中的空白數(shù)據(jù)字符總會(huì)被忽略, 并且位于一個(gè)未轉(zhuǎn)義的字符類(lèi)外部的#字符和下一個(gè)換行符之間的字符也被忽略。 這個(gè)修飾符 等同于 perl 中的 /x 修飾符,使被編譯模式中可以包含注釋。 注意:這僅用于數(shù)據(jù)字符。 空白字符 還是不能在模式的特殊字符序列中出現(xiàn),比如序列 (?( 引入了一個(gè)條件子組(譯注: 這種語(yǔ)法定義的 特殊字符序列中如果出現(xiàn)空白字符會(huì)導(dǎo)致編譯錯(cuò)誤。 比如(?(就會(huì)導(dǎo)致錯(cuò)誤)。e?(PREG_REPLACE_EVAL)如果這個(gè)修飾符設(shè)置了,?preg_replace()?在進(jìn)行了對(duì)替換字符串的 后向引用替換之后, 將替換后的字符串作為php 代碼評(píng)估執(zhí)行(eval 函數(shù)方式),并使用執(zhí)行結(jié)果 作為實(shí)際參與替換的字符串。單引號(hào)、雙引號(hào)、反斜線()和 NULL 字符在 后向引用替換時(shí)會(huì)被用反斜線轉(zhuǎn)義.注意:請(qǐng)確保?replacement?參數(shù)由合法 php 代碼字符串組成,否則 php 將會(huì) 在?preg_replace()?調(diào)用的行上產(chǎn)生一個(gè)解釋錯(cuò)誤。僅?preg_replace()?使用此修飾符,其他 PCRE 函數(shù)忽略此修飾符。A?(PCRE_ANCHORED)如果設(shè)置了這個(gè)修飾符,模式被強(qiáng)制為'錨定'模式,也就是說(shuō)約束匹配使其僅從 目標(biāo)字符串的開(kāi)始位置搜索。這個(gè)效果同樣可以使用適當(dāng)?shù)哪J綐?gòu)造出來(lái),并且 這也是 perl 種實(shí)現(xiàn)這種模式的唯一途徑。D?(PCRE_DOLLAR_ENDONLY)如果這個(gè)修飾符被設(shè)置,模式中的元字符美元符號(hào)僅僅匹配目標(biāo)字符串的末尾。如果這個(gè)修飾符 沒(méi)有設(shè)置,當(dāng)字符串以一個(gè)換行符結(jié)尾時(shí), 美元符號(hào)還會(huì)匹配該換行符(但不會(huì)匹配之前的任何換行符)。 如果設(shè)置了修飾符m,這個(gè)修飾符被忽略. 在 perl 中沒(méi)有與此修飾符等同的修飾符。S當(dāng)一個(gè)模式需要多次使用的時(shí)候,為了得到匹配速度的提升,值得花費(fèi)一些時(shí)間 對(duì)其進(jìn)行一些額外的分析。如果設(shè)置了這個(gè)修飾符,這個(gè)額外的分析就會(huì)執(zhí)行。當(dāng)前, 這種對(duì)一個(gè)模式的分析僅僅適用于非錨定模式的匹配(即沒(méi)有單獨(dú)的固定開(kāi)始字符)。U?(PCRE_UNGREEDY)這個(gè)修飾符逆轉(zhuǎn)了量詞的'貪婪'模式。 使量詞默認(rèn)為非貪婪的,通過(guò)量詞后緊跟??的方式可以使其成為貪婪的。這和 perl 是不兼容的。 它同樣可以使用?模式內(nèi)修飾符設(shè)置?(?U)進(jìn)行設(shè)置, 或者在量詞后以問(wèn)號(hào)標(biāo)記其非貪婪(比如.*?)。注意:在非貪婪模式,通常不能匹配超過(guò)?pcre.backtrack_limit?的字符。
X?(PCRE_EXTRA)這個(gè)修飾符打開(kāi)了 PCRE 與 perl 不兼容的附件功能。模式中的任意反斜線后就 ingen 一個(gè) 沒(méi)有特殊含義的字符都會(huì)導(dǎo)致一個(gè)錯(cuò)誤,以此保留這些字符以保證向后兼容性。 默認(rèn)情況下,在 perl 中,反斜線緊跟一個(gè)沒(méi)有特殊含義的字符被認(rèn)為是該字符的原文。 當(dāng)前沒(méi)有其他特性由這個(gè)修飾符控制。J?(PCRE_INFO_JCHANGED)內(nèi)部選項(xiàng)設(shè)置(?J)修改本地的PCRE_DUPNAMES選項(xiàng)。允許子組重名, (譯注:只能通過(guò)內(nèi)部選項(xiàng)設(shè)置,外部的 /J 設(shè)置會(huì)產(chǎn)生錯(cuò)誤。)u?(PCRE_UTF8)此修正符打開(kāi)一個(gè)與 perl 不兼容的附加功能。 模式字符串被認(rèn)為是utf-8的. 這個(gè)修飾符 從 unix 版php 4.1.0 或更高,win32版 php 4.2.3 開(kāi)始可用。 php 4.3.5 開(kāi)始檢查模式的 utf-8 合法性。 標(biāo)簽:
PHP
相關(guān)文章:
1. CSS hack用法案例詳解2. 利用promise及參數(shù)解構(gòu)封裝ajax請(qǐng)求的方法3. JSP數(shù)據(jù)交互實(shí)現(xiàn)過(guò)程解析4. asp(vbs)Rs.Open和Conn.Execute的詳解和區(qū)別及&H0001的說(shuō)明5. ASP 信息提示函數(shù)并作返回或者轉(zhuǎn)向6. Ajax實(shí)現(xiàn)表格中信息不刷新頁(yè)面進(jìn)行更新數(shù)據(jù)7. PHP設(shè)計(jì)模式中工廠模式深入詳解8. 解決AJAX返回狀態(tài)200沒(méi)有調(diào)用success的問(wèn)題9. .NET中l(wèi)ambda表達(dá)式合并問(wèn)題及解決方法10. ThinkPHP5實(shí)現(xiàn)JWT Token認(rèn)證的過(guò)程(親測(cè)可用)
排行榜
