本文中的例子来自与《精通正则表达式》,但我需要用vim中的正则方言来实现他们,以学习vim正则语法。每一个例子,我都会尽量给出所使用表达式所代表的意义。
1. 为数值添加逗号。
英文中,通常将1234567890这样的数字用逗号三位一组地分割为1,234,567,890以方便阅读。本例用vim替换功能自动实现逗号的添加。
:%s/\d\@<=\(\(\d\d\d\)\+\>\)\@=/,/g
使用到的语法点包括:
1)零宽断言\@=与负向零宽断言\@<=,用于匹配位置,而不是匹配文本。
2)在所有行进行替换:%s,在当前行进行替换:s,在当前行所有未匹配文本中替换/g
3)因为零宽断言匹配的只是位置,所以/g可以为数值添加多个“,”。
4)\(\(\d\d\d\)\+\>\)表明从匹配点到数值的结尾这个区间内,一共有3的倍数个数字。
5)\d\@<=\(\(\d\d\d\)\+\>\)\@=表明数值在匹配点前面有数字\d\@<=,后有3的倍数个数字。
:%s/\d\@=\(\(\d\d\d\)\+\d\@!\)\@=/,/g
翻译过来就是,如果某个匹配点的前面是数字,匹配点和数值最后一个非数字点之间,有3的倍数个数字,那么就在这个匹配点处,加上","
错误解法:
:%s/\d\@<=\(\d\d\d\)\+\)\@=\d\@!/,/g
2. 贪婪与懒惰
默认情况下,Vim使用贪婪模式进行匹配,也就是尽可能多地吃进字符。比如使用/a.*b可以匹配axbxb中的axbxb。如果指向匹配axb,那么应该将*替换为\{-},即/a.\{-}b,表示尽可能少地吃进字符。
参考资料:
man vim pattern http://man.chinaunix.net/newsoft/vi/doc/pattern.html 这是最完整的学习资料
类别:Vim 查看评论文章来源:
http://hi.baidu.com/hawkingliu/blog/item/adc94a1687767f4f20a4e9e8.html
posted on 2008-04-27 17:25
ronliu 阅读(2379)
评论(3) 编辑 收藏 引用