2009年6月26日星期五

Vim中的正则表达式,对应于《正则表达式30分钟入门教程》


 deerchao的《正则表达式30分钟入门教程》我读过好几遍,可以说是极好的学习正则表达式的入门文章。我常用的文本编辑器是Vim,具有强大的查找功能。不过,Vim的表示方式和《正则表达式30分钟入门教程》有些不同。这遍文章对应教程,把不同部分列出来,作为备份。
 说明:相同的就不列出来了。

序号


入门教程


Vim


备注


1


\b是正则表达式规定的一个特殊代码……代表着单词的开头或结尾,也就是单词的分界处


没有直接对应的。

\<,表示单词的起始;

\>,表示单词的结


要查找单词hi,要用 \<hi\>


2


+则匹配重复1次或更多次


\{1,}  1 或更多,同 \+


\d+匹配1个或更多连续的数字,Vim \d\+


3


重复零次或一次


\{0,1}   0 1,同 \=





4


\(?0\d{2}[) -]?\d{8}

这个表达式可以匹配几种格式的电话号码


\(\=0\d\{2}[) -]\=\d\{8}





5


如果满足其中任意一种规则都应该当成匹配,具体方法是用|把不同的规则分隔开


在一个查找模式中,"" 运算符是 "\|"





6


 \b(\w+)\b\s+\1\b

可以用来匹配重复的单词


\<\(\w\+\)\s\+\1\>





7


\b\w+(?=ing\b),匹配以ing结尾的单词的前面部分(除了ing以外的部分)


\<\w\+\(ing\)\@=


Vim称为:零宽度匹配前面的匹配原


8


(?<=\bre)\w+\b 会匹配以re开头的单词的后半部分(除了re以外的部分)


\(\<re\)\@<=\w\+


零宽度反向匹配。要求前面的匹配原紧贴在后面的模式之前匹配


9


假如你想要给一个很长的数字中每三位间加一个逗号(当然是从右边加起了)

((?<=\d)\d{3})+\b


\(\(\d\)\@<=\d\{3}\)\+\>





10


(?<=\s)\d+(?=\s)匹配以空白符间隔的数字


\(\s\)\@<=\d\+\(\s\)\@=





11


匹配包含后面不是字母u的字母q的单词

\b\w*q(?!u)\w*\b


\<\w*q\(u\)\@!\w*\>


零宽度否匹配,亦即,要求前面的匹配原在当前位置__匹配


12


\d{3}(?!\d)匹配三位数字,而且这三位数字的后面不能是数字


\d\{3}\(\d\)\@!





13


\b((?!abc)\w)+\b匹配不包含连续字符串abc的单词


\<\(\(\(abc\)\@!\)\w\)\+\>





14


(?<![a-z])\d{7}匹配前面不是小写字母的七位数字


\([a-z]\)\@<!\d\{7}


零宽度反向否匹配,要求前面的匹配原__紧贴在其后的模式之前匹配


15


(?<=<(\w+)>).*(?=<\/\1>)匹配不包含属性的简单HTML标签内里的内容


没解决,寻求帮助







以前的文章《Vim中表示匹配尽可能少的正则表达式【.\{-}】

没有评论: