Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1378840
  • 博文数量: 704
  • 博客积分: 10140
  • 博客等级: 上将
  • 技术积分: 6230
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-15 20:41
文章分类

全部博文(704)

文章存档

2013年(1)

2012年(16)

2011年(536)

2010年(151)

分类: C/C++

2011-01-16 18:41:16

 

[翻译]

 

/\<\d\d\d\d\>            : Search for exactly 4 digit numbers

                              查找4个数字的全字匹配

[注解]

 

                                                                                                    :help /\d

这个正则式全字匹配4个数字。

\d”匹配0-9间的任一数字。

 

[翻译]

 

/\D\d\d\d\d\D               : Search for exactly 4 digit numbers

                              查找4个数字的全字匹配

 

[注解]

 

                                                                                                    :help /\D

这个正则式和上面一样,也全字匹配4个数字。

\D”匹配非数字。

 

[翻译]

 

/\<\d\{4}\>              : same thing

                              同上

 

[注解]

 

                                                                                                    :help /\{

这个正则式和上面两个一样,全字匹配4个数字。

\{4}”表示匹配它前面的字符4次。

 

[翻译]

 

/\([^0-9]\|^\)%.*%          : Search for absence of a digit or beginning of line

                              查找

[注解]

 

                                                                                                    :help /\(

这个正则式组合使用了前面介绍的操作符,理解起来有些复杂。

\( \)”的作用是把括号里面的内容当做一个单一的元字符。括号里可以包含正则式,但用这种转义括号包起来时,会把这个正则式当做一个元字符。例如,“*”字符的含义它前面的字符出现任意次。如果“*”用在“\( \)”后面时,就会表示“\( \)”中的正则式出现任意次,也就是把“\( \)”中的内容当做一个元字符来处理。

所以对上面的这个表达式来讲,会把“\( \)”中的表达式和“%.*%”结合起来进行查找,而“\( \)”中的表达式是或的关系,因此这个正则式实际可以拆分为下面两个正则式的或运算:“[^0-9]%.*%”及“^%.*%”。

这样拆分后,我们就很容易搞懂它的含义了。第一个正则式查找%前为非数字,在它后面还有一个%的匹配;第二个正则式查找行首是%,它后面还有另外一个%的匹配;这两个表达式再进行或运算,也就是查找满足第一个正则式的匹配,或者满足第二个正则式的匹配,满足两者中任一个即匹配成功。


[翻译]

" finding empty lines 查找空行

/^\n\{3}                    : find 3 empty lines

                              查找 3 行空行

[注解]

                                                                                                    :help /\n

这个正则表达式匹配三个连续的空行,也就是在行首位置有3个连续的换行符。

其中“\n”匹配换行符。

 

 [翻译]

" using rexexp memory in a search

在查找中使用正则表达式存储

/\(fred\).*\(joe\).*\2.*\1

[注解]

                                                                                                    :help /\1

                                                                                                    :help /\2

在这个正则式中,“\1”代表与第一个“\( \)”间的子式的相同的字符串,“\2”为第2个,“\3”为第3个,以此类推,一直到“\9”。

所以对这个例子来说,它等同于“fred.*joe.*joe.*fred”。

但是,正则表达式“\([abc]\{3}\).*\1”却并不等同于“[abc]\{3}.*[abc]\{3}”。

因为“\1”代表第一个“\( \)”所匹配的内容,如果第一个“\( \)”匹配了“abc”,那么“\1”就代表“abc”;如果第一个“\( \)”匹配了“abb”,那么“\1”就代表“abb”。

显然正则式“[abc]\{3}.*[abc]\{3}”并不是这个含义。

 

[翻译]

" Repeating the Regexp (rather than what the Regexp finds)

重复正则表达式(不管这个正则表达式查找什么)

/^\([^,]*,\)\{8}

[注解]

这个正则式是把“\( \)”间的元素重复8次,即相当于查找“^([^,]*,([^,]*,([^,]*,([^,]*,([^,]*,([^,]*,([^,]*,([^,]*,”。

其中“([^,]*,”表示任意个非“,”的字符,后面紧跟着一个“,”。

 

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

chinaunix网友2011-03-08 20:57:11

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com