要在 VIM中使用高级搜索和替换功能,就要熟悉 VIM 中的正则表达式,VIM 正则和我们常用正则的语法大体相近,但是还是有个别不同的地方。
下面我们对 VIM 正则表达式进行介绍并总指出其与 Perl 正则的不同之处。
字符集
. 匹配任意一个字符 \w 匹配单词字母,等同于[0-9A-Za-z_]。 \W 匹配单词字母之外的任意字符,等同于[^0-9A-Za-z_]。 \t 匹配字符。 \a 所有的字母字符. 等同于[a-zA-Z] \e \t \r \b \d 数字 [0-9] \D 非数字 [^0-9] \x 十六进制数 [0-9a-fA-F] \X 非十六进制数 [^0-9a-fA-F] \s 空白字符 [ ] ( 和),等同于[ /t] \S 非空白字符 [^ ] (除 和 之外),等同于[^ /t] \l 小写字母 [a-z] \L 非小写字母 [^a-z] \u 大写字母 [A-Z] \U 非大写字母 [^A-Z] \i 标识符字符 'isident' \I 同于\i,但排除了数字 \k 关键字字符 \K 同\k,但排除数字 \p 可打印字符 \P 同\p,但排除数字 \f 文件名字符 \F 同\f,但排除数字 \_ 表示段行,他与以上的字符组合,如 \_s,\_a 。。。
范围
[abc] 匹配方括号中的任意一个字符。可以使用-表示字符范围, [a-z0-9] 匹配小写字母和阿拉伯数字。 [^abc] 在方括号内开头使用^符号,表示匹配除方括号中字符之外的任意字符。
多选一
模式中的"或"操作符是"\|"。 如: /foo\|bar
分组
\(\)
在替换的时候可以使用 \1、\2 。。。来引用 \(\) 捕获的内容
perl : ()
量次(重复次数)
* 匹配0-任意个 *\{-\} * 的惰性模式 perl : *? \+ 匹配1 至任意个 perl : + \+\{-\} \+ 的惰性模式 perl : +? \? 匹配0-1个 perl : ? \{n,m\} 匹配n-m个 perl : {n,m} \{-n,m\} \{n,m\} 的惰性模式 perl : {n,m}? \{n\} 匹配n个 perl : {n} \{-n\} \{n\} 的惰性模式 perl : {n}? \{n,\} 匹配n 至任意个 perl : {n,} \{-n,\} \{n,\} 的惰性模式 perl : {n,}? \{,m\} 匹配0- m 个 perl : {0,m}
元字符 说明 \* 匹配 * 字符 \. 匹配 . 字符 \/ 匹配 / 字符 \\ 匹配 \ 字符 \[ 匹配 [ 字符
位置
$ 匹配行尾 ^ 匹配行首 \< 匹配单词词首 perl : \b \> 匹配单词词尾
函数式
:s/替换字符串//=函数式
在函数式中可以使用 submatch(1)、submatch(2) 等来引用 /1、/2 等的内容,而submatch(0)可以引用匹配的整个内容。