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 个捕获的组\(\) |
其他
\(\) |
组捕获 |
\%(\) |
非捕获组,和\(\) 类似,但不捕获 |
\| |
分支 |