Best of VIM Tips(譯註) - 連載5 查找(d)

[翻譯]

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

" /zs/ze正則表達式符號,:h //zs

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

                              查找XML標記的內容,忽略尖括號

[註解]

                                                                                                    :help //zs

                                                                                                    :help //ze

這個正則表達式匹配位於“<>”間的內容,但不匹配“<”和“>”這兩個字符。

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

 

[翻譯]

" zero-width :h //@=

"零長度 :h //@=

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

                              查找XML標記的內容,忽略尖括號

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

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

[註解]

                                                                                                    :help /@<=

                                                                                                    :help /@=

這兩個正則表達式理解起來有難度,要講清楚也不容易。

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

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

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

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

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

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

                                                                                                    :help //_[]

/_[]”匹配集合中的元字符和換行符。我們在前面介紹過“/_.”和“/_s”,它們都是在原有的匹配上增加了換行符。這是VIM正則表達式的擴展。

 

[翻譯]

"searching over multiple lines /_ means including newline

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

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

                                     查找多行註釋

[註解]

                                                                                                    :help /p

                                                                                                    :help /_p

                                                                                                    :help //{-

這個正則表達式查找跨行的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 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章