VIM-灰常有用的正則匹配

郭同学的IC修炼笔记發表於2024-03-12

一、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”的

2.只匹配“aaa”

3.匹配一個字母加一個數字

4.匹配擁有四個"ha"的單詞(圓括號字元分組)
這裡用到了圓括號字元分組的方法,將ha看做一個整體,匹配滿足次數的單詞。

上圖的匹配模式為:將ha看做整體,匹配四次
比如我不知道我想找的單詞裡有多少次ha,呢麼也可以按照下面的辦法來。

上圖的正則匹配式的含義是:匹配以ha開頭,ha匹配任意多次,詞尾也是ha的。

小結
vim中正則匹配的用處很多,如搜尋、替換、刪除、文字提取(見上篇文章:https://blog.csdn.net/weixin_43655109/article/details/133213974)等等,用好的話可以大大提高工作效率。

相關文章