vim正则表达式
Contents
vim正则表达式
本文只打算将非常常用而易忘记的内容记录下来,而不打算将 Vim 正则表达式中晦涩的部分展示出来,而且通常我们不会用到。Vim 的正则表达式主要用于文本替换(s
命令)。
Vim 正则表达式转义字符
这种转义字符又称为 metacharacters ,以下是典型的 Vim 转义字符。
# | Matching | # | Matching |
---|---|---|---|
. | 除了换行符的任意字符 | ||
\s | 空白符 | \S | 非空白字符 |
\d | 数字 | \D | 非数字 |
\x | 十六进制字符 | \X | 非十六进制字符 |
\o | 八进制字符 | \O | 非八进制字符 |
\h | 字母和下划线(单词头字符) | \H | 非字母和下划线 |
\p | 可打印字符 | \P | 除去数字的可打印字符 |
\w | 单词字符 | \W | 非单词字符 |
\a | 字母字符(alphabetic) | \A | 非字符字符 |
\l | 小写字符 | \L | 非小写字符 |
\u | 大写字符 | \U | 非大写字符 |
Quantifiers, Greedy and Non-Greedy
Quantifiers | 描述 |
---|---|
* | 匹配0个或多个字符 |
\+ | 匹配1个或多个字符 |
\= | 匹配0个或1个字符 |
\{n,m} | 匹配n~m个字符 |
\{n} | 匹配n个字符 |
\{,m} | 匹配至多m个字符 |
\{n,} | 匹配至少n个字符 |
以上限定词是贪婪的,以下表格的是非贪婪的。
Quantifiers | 描述 |
---|---|
\{-} | 匹配0个或多个字符 |
\{-n,m} | 非贪婪匹配n~m个字符 |
\{-n,} | 匹配至少n个字符 |
\{-,m} | 匹配至多m个字符 |
还有一些必须转义的字符 \*
\.
\/
\\
\[
表示它们本身。\|
表示正则表达式的 or 操作。$
行尾 ^
行首 \<
词首 \>
词尾也是非常重要的。
以下正则是可选的一个例子:
\(Date:\|Subject:\|From:\)\(\s.*\)
Grouping and Backreferences
Vim 的正则表达式一样有捕获组的概念,用 \(
\)
就能产生一个捕获组。在替换部分可以用 \1
\2
等来引用这些捕获组。
# | 描述 |
---|---|
& | 引用整个匹配 |
\0 | 引用整个匹配 |
\1 | 引用第一个捕获组 |
\2 | 引用第二个捕获组 |
\9 | 引用第九个捕获组,依次类推 |
~ | 引用前一个替换字符串 |
\L | 接下来的字符都是小写的 |
\U | 接下来的字符都是大写的 |
\E | 结束 \U \L |
\e | 结束 \U \L |
\r | 添加一个换行符 |
\l | 下一个字符标记为小写 |
\u | 下一个字符标记为大写 |
Global 命令
Vim 的正则表达式除了可以运用于替换(substitute)之外,还可以运用于 global 命令。通用形式如下:
:range g[lobal][!]/pattern/cmd
以上表示将 range (默认是整个文件)内的行匹配模式 pattern 的那些行执行命令 cmd。!
的含义是不匹配的行将执行命令。如:
:g/^\s*$/ d
将删除所有空行。
Author zoro.wang
LastMod 2018-01-18