`
insertyou
  • 浏览: 901789 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics