Best of VIM Tips(譯註) – 連載5 尋找(d)

來源:互聯網
上載者:User

[翻譯]

" /zs and /ze regex delimiters :h //zs

" /zs和/zeRegex符號,:h //zs

/</zs[^>]*/ze>              : search for tag contents, ignoring chevrons

                              尋找XML標記的內容,忽略角括弧

[註解]

                                                                                                    :help //zs

                                                                                                    :help //ze

這個Regex匹配位於“<>”間的內容,但不匹配“<”和“>”這兩個字元。

其中,“/zs”指明匹配在此處開始,“/ze”指明匹配在此處結束。

 

[翻譯]

" zero-width :h //@=

"零長度 :h //@=

/</@<=[^>]*>/@=             : search for tag contents, ignoring chevrons

                              尋找XML標記的內容,忽略角括弧

/</@<=/_[^>]*>/@=           : search for tags across possible multiple lines

                              尋找可能越過多行的XML標記

[註解]

                                                                                                    :help /@<=

                                                                                                    :help /@=

這兩個Regex理解起來有難度,要講清楚也不容易。

像“/@<=”、“/@=”、“/<”、“/>”、“/zs”、“/ze”這類的元字元,並不匹配任何實際字元,它們只是用來檢查匹配是否存在。Regex在進行匹配時,需要滿足它們所規定的條件。因為它們不匹配實際字元,所以稱它們為匹配零長度的元字元。

“/<”和“/>”匹配單詞的開始和結束。

“/zs”和“/ze”表示匹配的開始和結束。

“/@<=”要求前面的元字元剛好出現在它後面的匹配模式之前。它只是用來檢查這個條件,它前面的元字元並不會包含在匹配結果中。

“/@=”匹配它前面的元字元,但匹配長度為0。也就是說,它只檢查前面的元字元是否存在,並不把前面的元字元包含在匹配結果中。在它後面出現的元字元,將在與它前面的元字元相同的位置被匹配。舉個例子,“foo/(bar/)/@=”匹配foolbar單詞中的foo,但不會匹配fool。而“foo/(bar/)/@=foo”不匹配任何東西,因為它要求在foobar的b字母開始的位置上匹配foo,這顯然是不可能的。“foo/(bar/)/@=…”會匹配到foobar而不會匹配foobbb,想一想為什嗎?

對於正則式“</@<=[^>]*>/@=”來說,“/@<=”的作用是要求“<”必須出現在“[^>]*”模式之前,但匹配是從“[^>]*”開始的;而“/@=”表示必須有“>”出現,但並不把“>”包含在匹配結果中(零長度匹配)。所以這個運算式的效果和上面的“</zs[^>]*/ze>”是相同的。

                                                                                                    :help //_[]

“/_[]”匹配集合中的元字元和分行符號。我們在前面介紹過“/_.”和“/_s”,它們都是在原有的匹配上增加了分行符號。這是VIMRegex的擴充。

 

[翻譯]

"searching over multiple lines /_ means including newline

" 尋找多行。/_ 表示包括新行

/<!--/_p/{-}-->                : search for multiple line comments

                                     尋找多行注釋

[註解]

                                                                                                    :help /p

                                                                                                    :help /_p

                                                                                                    :help //{-

這個Regex尋找跨行的XML注釋。

其中“/p”代表可顯示字元,“/_p”在“/p”基礎增加了分行符號的匹配。

“/{-}”匹配前面的元字元,儘可能少。它和“*”的區別是,“*”會儘可能多的匹配它前面的元字元。

 

[翻譯]

/fred/_s*joe/i                    : any whitespace including newline

                                     尋找在 fred 和 joe 兩個單詞之間任意多的空格,包括新行

[註解]

見前。

 

[翻譯]

/bugs/(/_./)*bunny                : bugs followed by bunny anywhere in file

                                     bugs 後任意位置含有 bunny 單詞的多個行

[註解]

見前。

 

[翻譯]

:h /_                             : help

                                     協助

[註解]

                                                                                                    :help /_

協助入口。

 

[參考文檔]

1. http://www.rayninfo.co.uk/vimtips.html

2. http://groups.google.com/group/Vim-cn/msg/f72fba0645955101?

3. VIM協助檔案

4. http://vimcdoc.sourceforge.net/

 

[尾記]

本文可以自由應用於非商業用途。轉載請註明出處。

原文連結:http://blog.csdn.net/easwy 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.