转载自:http://www.xuebuyuan.com/806332.html;个人进行了一些修正和添加。
下面我们对 VIM 正则表达式进行介绍并会显示指出其与 Perl 正则的不同之处。
字符集
. 匹配任意一个字符
w 匹配单词字母,等同于[0-9A-Za-z_]。
W 匹配单词字母之外的任意字符,等同于[^0-9A-Za-z_]。
匹配字符。
a 所有的字母字符. 等同于[a-zA-Z]
e
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] 在方括号内开头使用^符号,表示匹配除方括号中字符之外的任意字符。
多选一
模式中的"或"操作符是"|"。(因为vim输入正则表达式是在vim命令模式下输入的,自然会存在一些特殊字符[就像java里输入要输入四个],故这里不能直接用|而应该用转义) 如: /foo|bar (/是从上往下搜,?是从下往上搜)
分组
() (主要还是因为是在vim命令行里输入,而vim又不支持像bash一样用'pattern'括起来的字符串就只是字符串)
在替换的时候可以使用 1、2 。。。来引用 () 捕获的内容
perl : () ,替换的时候要么1要么$1,notepad++是后者。
量次(重复次数)
* 匹配0-任意个
*{-}(经过测试是-*才对) * 的惰性模式 perl : *?
+ 匹配1 至任意个 perl : +
+{-}(经过测试不行,但没测出是怎么写,可以用{-1,}代替) + 的惰性模式 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 : > 匹配单词词尾
函数式
:s/替换字符串//=函数式
在函数式中可以使用 submatch(1)、submatch(2) 等来引用 /1、/2 等的内容,而submatch(0)可以引用匹配的整个内容。