PHP擴(kuò)展之文本處理(二)——PCRE正則表達(dá)式語法5——錨和句點(diǎn)
在一個(gè)字符類外面,在默認(rèn)匹配模式下,?^?是一個(gè)斷言當(dāng)前匹配點(diǎn)位于目標(biāo)字符串開始處的斷言。在一個(gè)字符類內(nèi)部,?^?表明這個(gè)字符類中描述的字符取反(詳見下文)。
^?并不一定要是模式的第一個(gè)字符, 但是如果處于某個(gè)可選分支時(shí), 它應(yīng)該是該分支的首字符。如果所有選擇分支都以?^?開頭,這就是說, 如果模式限制為只匹配目標(biāo)的開頭, 它被稱為是一個(gè) ”緊固” 模式。(同樣也有其他方式可以構(gòu)造出緊固模式)
$?是用于斷言當(dāng)前匹配點(diǎn)位于目標(biāo)字符串末尾, 或當(dāng)目標(biāo)字符串以換行符結(jié)尾時(shí)當(dāng)前匹配點(diǎn)位于該換行符位置(默認(rèn)情況)。?$?不一定要作為模式的最后一個(gè)字符,但是如果它在某個(gè)可選分支中時(shí), 就應(yīng)該位于該分支的末尾。?$?在字符類中沒有特殊的意義。
$?的意義可以通過在編譯或匹配時(shí)設(shè)置?PCRE_DOLLAR_ENDONLY?改變?yōu)橹黄ヅ渥址┪病?這不會(huì)影響 Z 斷言的行為。
^?和?$?字符的意義在?PCRE_MULTILINE?選項(xiàng)被設(shè)置時(shí)會(huì)發(fā)生變化。 當(dāng)在這種情況下時(shí), 它們匹配每一個(gè)換行符后面的和前面的字符,另外, 也會(huì)匹配目標(biāo)字符串的開始和結(jié)束。比如, 模式 /^abc$/ 在多行模式下會(huì)成功匹配目標(biāo)字符串 ”defnabc”, 而正常情況下不會(huì)。因此,由于所有的可選分支都以 ^ 開始, 在單行模式下這成為緊固模式,然而在多行模式下,這是非緊固的。?PCRE_DOLLAR_ENDONLY?選項(xiàng)在PCRE_MULTILINE?設(shè)置后失效。
注意: A、Z、 z 等轉(zhuǎn)義序列可以在任何模式下用于匹配目標(biāo)字符串的開始和結(jié)束位置。 并且如果模式的所有分支都以 A 開始,它同樣是緊固的, 而與?PCRE_MULTILINE?是否設(shè)置無關(guān)。
句點(diǎn)在字符類外部,模式中的句點(diǎn)匹配目標(biāo)字符串中的任意字符,包括非打印字符, 但是(默認(rèn))不包括換行符。如果?PCRE_DOTALL?被設(shè)置,句點(diǎn)就會(huì)匹配換行符。 句點(diǎn)的處理和^、$的處理沒有關(guān)聯(lián),它們唯一的關(guān)系是它們都涉及到了換行符。 句點(diǎn)在字符類中沒有任何意義。
C可以被用于匹配單字節(jié), 也就是說在UTF-8模式下,句點(diǎn)可以匹配多字節(jié)字符。
相關(guān)文章:
1. phpstudy apache開啟ssi使用詳解2. CentOS郵件服務(wù)器搭建系列—— POP / IMAP 服務(wù)器的構(gòu)建( Dovecot )3. .NET SkiaSharp 生成二維碼驗(yàn)證碼及指定區(qū)域截取方法實(shí)現(xiàn)4. IntelliJ IDEA創(chuàng)建web項(xiàng)目的方法5. 存儲(chǔ)于xml中需要的HTML轉(zhuǎn)義代碼6. docker容器調(diào)用yum報(bào)錯(cuò)的解決辦法7. ASP中實(shí)現(xiàn)字符部位類似.NET里String對(duì)象的PadLeft和PadRight函數(shù)8. django創(chuàng)建css文件夾的具體方法9. MyBatis JdbcType 與Oracle、MySql數(shù)據(jù)類型對(duì)應(yīng)關(guān)系說明10. javascript xml xsl取值及數(shù)據(jù)修改第1/2頁
