正則表達式-單行與多行模式


 多行模式:

Multiline修飾的是^與$,就是說沒有Multiline的時候,把^和$與當作每一行(\n結尾的)的開頭和結束來匹配,有Multiline的時候是與整個字符串的開頭和結尾匹配;


單行模式:(開啟則“ . ”號會匹配所有字符,不開啟則匹配除了換行符之外的所有字符)

而Singleline修飾的是'.'的時候,就是說有Singleline的時候匹配的是所有字符(包括\n),沒有Singleline的時候,匹配的是除\n外的所有字符。



實現正則表達式匹配任意字符的真相:

使用“.”匹配幾乎任意字符。在正則表達式中,“.”是最常用的符號之一。不幸的是,它也是最容易被誤用的符號之一。

“.”匹配一個單個的字符而不用關心被匹配的字符是什么。唯一的例外是新行符。在本教程中談到的引擎,缺省情況下都是不匹配新行符的。因此在缺省情況下,“.”等於是字符集[^\n\r](Window)或[^\n]( Unix)的簡寫。

這個例外是因為歷史的原因。因為早期使用正則表達式的工具是基於行的。它們都是一行一行的讀入一個文件,將正則表達式分別應用到每一行上去。在這些工具中,字符串是不包含新行符的。因此“.”也就從不匹配新行符。

現代的工具和語言能夠將正則表達式應用到很大的字符串甚至整個文件上去。本教程討論的所有正則表達式實現都提供一個選項,可以使“.”匹配所有的字符,包括新行符。在RegexBuddy, EditPad Pro或PowerGREP等工具中,你可以簡單的選中“點號匹配新行符”。在Perl中,“.”可以匹配新行符的模式被稱作“單行模式”。很不幸,這是一個很容易混淆的名詞。因為還有所謂“多行模式”。多行模式只影響行首行尾的錨定(anchor),而單行模式只影響“.”。

其他語言和正則表達式庫也采用了Perl的術語定義。當在.NET Framework中使用正則表達式類時,你可以用類似下面的語句來激活單行模式:Regex.Match(“string”,”regex”,RegexOptions.SingleLine)



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM