分类: 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次,即相当于查找“^([^,]*,([^,]*,([^,]*,([^,]*,([^,]*,([^,]*,([^,]*,([^,]*,”。
其中“([^,]*,”表示任意个非“,”的字符,后面紧跟着一个“,”。
chinaunix网友2011-03-08 20:57:11
很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com