VIM中的正则表达式
转载:http://jjz.iteye.com/blog/387649
记性不好,才一段时间不用发现vim的东西忘的差不多了。要重新熟悉才行。现从正则表达式开始,用惯了Java和Python的正则表达式,再用Linux的正则表达式还真有点不习惯,而且grep和vim的正则表达式有些微区别,grep和egrep的正则表达式也有一点区别。用用之前要好好想想才行,太恶心了。
今天现把VIM的正则表达式整理一些,过几天整理grep的。(补充:grep的正则表达式在元字符方面和vi差不多,不整理了)
vim的正则表达式的有两种模式,magic和nomagic,两种模式下,元字符是不一样的。可以通过set mogic和set nomagic进行选择,默认是magic。建议不要乱设置,就用magic模式差不多。也可以再Pattern指定用magic和nomagic,这里不废话了,下面列出常用的magic的表达式。
对前一个模式的次数匹配
\* | 0到多次,尽可能多匹配 |
\+ | 1到多次,尽可能多匹配 |
\= | 0到1次,尽可能多匹配 |
\? | 0到1次,尽可能多匹配 |
\{n,m} | n到m词,尽可能多匹配 |
\{n} | n次,尽可能多匹配 |
\{n,} | 至少n次,尽可能多匹配 |
\{,m} | 0到m次,尽可能多匹配 |
\{} | 0到多次,尽可能多匹配(和\*一样) |
\{-n,m} | n到m次,尽可能少匹配 |
\{-n} | n次 |
\{-n,} | 至少n次,尽可能少匹配 |
\{-,m} | 至多m次,尽可能少匹配 |
\{-} | 0到多次,尽可能少匹配 |
位置匹配
^ | 行开头 |
\_^ | 行开头 |
$ | 行末尾 |
\_$ | 行末尾 |
. | 换行之外的任何字符 |
\_. | 单个字符,包括换行符 |
\< | 单词开始 |
\> | 单词结束 |
\%^ | 文件开头 |
\%$ | 文件结束 |
\%V | 可视化区域内部 |
\%# | 光标位置 |
\%'m | 标记点m,m可以自己定义的标记点(使用'm) |
\%nl | 匹配第n行,n是一个数字 |
\%nc | 匹配第n列,n是一个数字 |
常用预定义字符
\i | 标识符字符,如字母数字下划线等 |
\I | 和\i相似,但不包括数字 |
\f | 文件名字符 |
\F | 类似\f,但不包括数字 |
\p | 可打印字符 |
\P | 类似\p,但不包括数字 |
\s | 空白字符 |
\S | 非空白字符 |
\d | 数字[0-9] |
\D | 非数字[^0-9] |
\x | 16进制字符[0-9a-fA-F] |
\X | 非16进制字符 |
\o | 八进制字符[0-7] |
\O | 非八进制字符 |
\w | 字母[a-zA-Z_0-9] |
\W | 非字母 |
\h | 单词开头字符,比\w少了数字 |
\H | 非单词开头字符 |
\a | 字母表字符[a-zA-Z] |
\A | 非字母表字符 |
\l | 小写字母 |
\L | 非小写字母 |
\u | 大写字母 |
\U | 非大写字符 |
\_x | X是上面字符中的一个,\_x比\x多匹配一个换行符 |
\t | <Tab> |
\n | 换行符 |
\1 \2 \3 | 第n个捕获的组\(\) |
其他
\(\) | 组捕获 |
\%(\) | 非捕获组,和\(\)类似,但不捕获 |
\| | 分支 |