Vim的正则表达式元字符和使用简单举例

Vim的正则表达式在查找和替换等文本操作中具有很大的作用,如果运用自如的话,那么应该是威力无边。如果要正确的使用正则表达式,首先必须理解一些基本的元字符。

Vim正则表达式中的一些基本的元字符

元字符 含义说明
. 匹配任意字符
[abc] 匹配放括号中的任意字符,也可以表示范围,例如[a-z0-9]
[^abc] 匹配除方括号中字符的任意其他字符
d 匹配阿拉伯数字,等同于[0-9]
D 匹配除阿拉伯数字之外的其他字符,等同于[^0-9]
x 匹配十六进制数字,等同于[0-9A-Fa-f]
X 匹配十六进制之外的任意字符,等同于[^0-9A-Fa-f]
w 匹配单词字母,等同于[0-9A-Za-z_]
W 匹配单词字母之外的任意字符,等同于[^0-9A-Za-z_]
t 匹配字符
s 匹配空白字符,等同于[ t]
S 匹配非空白字符,等同于[^ t]
* 匹配0-任意个
+ 匹配1-任意个
? 匹配0-1个
{n,m} 匹配n-m个
{n,} 匹配n-任意个
{,m} 匹配0-m个
& 匹配行尾
^ 匹配行首
< 匹配单词词首
> 匹配单词词尾

使用简单举例

/chars+[A-Za-z_]w*;                 \" 查找所有以char开头,之后是一个以上的空白,
\" 最后是一个标识符和分号
/dd:dd:dd                        \" 查找如 17:37:01 格式的时间字符串
:g/^s*$/d                             \" 删除只有空白的行
:s/<four>/4/g                        \" 将所有的four替换成4,但是fourteen中的four不替换

在正规表达式中使用 ( 和 ) 符号括起正规表达式,即可在后面使用1、2 等变量来访问 ( 和 ) 中的内容。

/(a+)[^a]+1                                          \" 查找开头和结尾处a的个数相同的字符串,
                                                            \" 如 aabbbaa,aaacccaaa,但是不匹配 abbbaa
:s/(https://[-a-z._~+%/]+)/<a href=\"1\">1</a>/   \" 将URL替换为<a href=\"https://url\">https://url</a>的格式
:s/(w+)s+(w+)/2t1                            \" 将 data1 data2 修改为 data2 data1

除非特别声明,文章均为牛会飞的博客原创,遵循署名-非商业使用-相同方式共享授权协议
转载请注明出处: https://blogfei.com/vim-regular-expression/

暂无评论