VIM-灰常有用的正则匹配

  • VIM-灰常有用的正则匹配已关闭评论
  • 92 次浏览
  • A+
所属分类:linux技术
摘要

VIM的一个强大之处就在于其文本搜索、匹配的能力,可用于替换、删除、查找等,极大提升用户的文本编辑效率,写代码必备技能。


一、VIM,GVIM中正则匹配的用处

VIM的一个强大之处就在于其文本搜索、匹配的能力,可用于替换、删除、查找等,极大提升用户的文本编辑效率,写代码必备技能。

二、常用的匹配字符

大体上可以分为四类,字符的匹配、数量的匹配(也可理解为匹配次数)、位置的匹配(开头、结尾等),和特殊字符的匹配。

2.1 字符的匹配

常用的字符匹配如下表:

字符 含义
. 匹配任意字符
[xxx] 匹配方括号中的任意字符
[^xxx] 匹配除了方括号内字符以外的任意字符
d 匹配任意数字,相当于[0-9]
D 匹配除了数字以外的任意字符,相当于[^0-9]
l 匹配字母a-z
L 匹配字母a-z以外的其他字符
u 匹配字母A-Z
U 匹配字母A-Z以外的其他字符
x 匹配十六进制数,相当于[0-9a-fA-F]
X 匹配十六进制数以外的字符,相当于[^0-9a-fA-F]
w 匹配任意word,简单来说就是任意数字、字母组成的一个无空白字符的字符串,两个字符串中间有空白字符的会被认为是两个word
s 匹配空白字符,会将空格和tab都匹配到
S 匹配空白字符以外的字符
t 匹配tab字符

2.2 数量的匹配(匹配次数)

一般格式是“字符匹配pattern次数匹配pattern”,表示将符合字符匹配pattern的字符匹配次数pattern次。注意使用时下表中除 * 外其他的前边的反斜杠不要丢掉。

字符 含义
* 匹配任意多次
匹配0-1次
+ 匹配1-任意多次
'{n,m}' 匹配n-m次
'{n}' 匹配n次
'{n,}' 匹配n到任意次
'{,n}' 匹配0-n次
注:实际使用时花括号两侧的单引号不用打,这里是markdown的问题,不打单引号啥都显示不出来。

2.3 匹配位置

指明匹配的位置,一般就行首行位词头词尾,要注意位置匹配时看清楚有没有空格,比如不要匹配行首时默认忽略了开头的空白字符从而导致匹配失败。

字符 含义
^ 匹配行首
$ 匹配行尾
< 匹配词首
> 匹配词尾

2.4特殊字符

有一些字符因为本身具有特殊含义,上边基本也都提到了,所以在匹配这些字符时要加反斜杠。

字符 含义
. 匹配字符“.”
* 匹配字符“*”
$ 匹配字符“$”
[ 匹配字符“[”,字符“]”同理,但是若直接匹配“[”和"]"也可以匹配到,加反斜杠一般用于和2.1中匹配方括号内任意字符的情况区分开
{ 同上
/ 匹配字符“/”, 字符“”同理

三、小练习

这里我们用vim的底行搜索举几个例子。
1.匹配开头是“aaa”的
VIM-灰常有用的正则匹配

VIM-灰常有用的正则匹配

2.只匹配“aaa”
VIM-灰常有用的正则匹配

3.匹配一个字母加一个数字
VIM-灰常有用的正则匹配

4.匹配拥有四个"ha"的单词(圆括号字符分组)
这里用到了圆括号字符分组的方法,将ha看做一个整体,匹配满足次数的单词。
VIM-灰常有用的正则匹配

上图的匹配模式为:将ha看做整体,匹配四次
比如我不知道我想找的单词里有多少次ha,呢么也可以按照下面的办法来。
VIM-灰常有用的正则匹配

上图的正则匹配式的含义是:匹配以ha开头,ha匹配任意多次,词尾也是ha的。

小结
vim中正则匹配的用处很多,如搜索、替换、删除、文本提取(见上篇文章:https://blog.csdn.net/weixin_43655109/article/details/133213974)等等,用好的话可以大大提高工作效率。