Chinaunix首页 | 论坛 | 博客
  • 博客访问: 424626
  • 博文数量: 161
  • 博客积分: 5005
  • 博客等级: 上校
  • 技术积分: 1090
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-20 16:38
文章分类

全部博文(161)

文章存档

2011年(21)

2010年(33)

2009年(89)

2008年(18)

我的朋友

分类: LINUX

2008-11-15 14:15:25

[翻译]

" \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

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

/                : 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.

2. ?

3. VIM帮助文件

4.

 

[尾记]

本文可以自由应用于非商业用途。转载请注明出处。

原文链接:http://blog.csdn.net/easwy

阅读(679) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~