Vim中的正则表达式

来源:互联网 发布:iphone照片无线导入mac 编辑:程序博客网 时间:2024/05/16 23:59
vim中命令行替换格式:

:s/正则表达式/替换字符串/选项

元字符

元字符是具有特殊意义的字符。使用元字符可以表达任意字符行首行尾某几个字符等意义。

元字符一览

元字符说明.匹配任意一个字符[abc]匹配方括号中的任意一个字符。可以使用-表示字符范围,
[a-z0-9]匹配小写字母和阿拉伯数字。[^abc]在方括号内开头使用^符号,表示匹配除方括号中字符之外的任意字符。\d匹配阿拉伯数字,等同于[0-9]\D匹配阿拉伯数字之外的任意字符,等同于[^0-9]\x匹配十六进制数字,等同于[0-9A-Fa-f]\X匹配十六进制数字,等同于[^0-9A-Fa-f]\w匹配单词字母,等同于[0-9A-Za-z_]\W匹配单词字母之外的任意字符,等同于[^0-9A-Za-z_]\t匹配<TAB>字符。\s匹配空白字符,等同于[ \t]\S匹配非空白字符,等同于[^ \t]

另外,如果要查找字符 *、.、/等,则需要在前面用 \ 符号,表示这不是元字符,而只是普通字符而已。

元字符说明\*匹配 * 字符。\.匹配 . 字符。\/匹配 / 字符。\\匹配 \ 字符。\[匹配 [ 字符。

表示数量的元字符 †

元字符说明*匹配0-任意个\+匹配1-任意个\?匹配0-1个\{n,m}匹配n-m个\{n}匹配n个\{n,}匹配n-任意个\{,m}匹配0-m个

表示位置的符号 †

元字符说明$匹配行尾^匹配行首\<匹配单词词首\>匹配单词词尾

示例:

Vim中删除行首的空格,至少1个,最多2个

:%s/^\s\{1,2}//

Vim中,将行首的空格及数字替换为字符”$”

:%s/^\s\{1,2}\d\{3,4}\s/$/

/char\s\+[A-Za-z_]\w*;                 " 查找所有以char开头,之后是一个以上的空白,                                             " 最后是一个标识符和分号/\d\d:\d\d:\d\d                        " 查找如 17:37:01 格式的时间字符串:g/^\s*$/d                             " 删除只有空白的行:s/\<four\>/4/g                        " 将所有的four替换成4,但是fourteen中的four不替换

替换变量 †

在正规表达式中使用 \(\) 符号括起正规表达式,即可在后面使用\1\2等变量来访问\(\) 中的内容。

使用例

/\(a\+\)[^a]\+\1                                          " 查找开头和结尾处a的个数相同的字符串,                                                                  " 如 aabbbaa,aaacccaaa,但是不匹配 abbbaa:s/\(http:\/\/[-a-z\._~\+%\/]\+\)/<a href="\1">\1<\/a>/   " 将URL替换为<a href="http://url">http://url</a>的格式:s/\(\w\+\)\s\+\(\w\+\)/\2\t\1                            " 将 data1 data2 修改为 data2 data1

函数式 †

在替换命令 s/// 中可以使用函数表达式来书写替换内容,格式为

:s/替换字符串/\=函数式

在函数式中可以使用 submatch(1)、submatch(2) 等来引用 \1\2 等的内容,而submatch(0)可以引用匹配的整个内容。

使用例

:%s/\<id\>/\=line(".")                              " 将各行的 id 字符串替换为行号:%s/^\<\w\+\>/\=(line(".")-10) .".". submatch(1)    " 将每行开头的单词替换为 (行号-10).单词 的格式,                                                           " 如第11行的 word 替换成 1. word

与Perl正则表达式的区别 †

元字符的区别

Vim语法    Perl语法        含义(vim中的正则表达式部分元字符需要\转义。
\+           +            1-任意个
\?           ?            0-1个
\{n,m}       {n,m}        n-m个
\(和\)       (和)          分组
\|           |            或操作

参考:

1)Vim Tips

http://www.vim.org/tips/index.php

2)Vim Tips wiki

http://vim.wikia.com/wiki/Main_Page

3)The Vi IMproved Editor Web Ring

http://www.webring.org/hub/vim

4)vim中的正则表达式

http://blog.chinaunix.net/space.php?uid=8038672&do=blog&id=81203