记性不好,才一段时间不用发现vim 的东西忘的差不多了。要重新熟悉才行。现从正则表达式开始,用惯了Java 和Python 的正则表达式,再用Linux 的正则表达式还真有点不习惯,而且grep 和vim 的正则表达式有些微区别,grep 和egrep 的正则表达式也有一点区别。用用之前要好好想想才行,太恶心了。
今天现把VIM 的正则表达式整理一些,过几天整理grep 的。(补充:grep的正则表达式在元字符方面和vi差不多,不整理了)
对前一个模式的次数匹配
\* | 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 个捕获的组\(\) |
其他
\(\) | 组捕获 |
\%(\) | 非捕获组,和\(\) 类似,但不捕获 |
\| | 分支 |
联系客服