vim正規表示式

2021-06-18 20:37:13 字數 2985 閱讀 1754

元字元 說明

.匹配任意乙個字元

[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]。

/a 所有的字母字元. 等同於[a-za-z]

/l 小寫字母 [a-z]

/l 非小寫字母 [^a-z]

/u 大寫字母 [a-z]

/u 非大寫字母 [^a-z]

表示數量的元字元

元字元 說明

* 匹配0-任意個

/+ 匹配1-任意個

/? 匹配0-1個

/ 匹配n-m個

/ 匹配n個

/ 匹配n-任意個

/ 匹配0-m個

/_. 匹配包含換行在內的所有字元

/ 表示前乙個字元可出現零次或多次,但在整個正規表示式可以匹配成功的前提下,匹配的字元數越少越好

/= 匹配乙個可有可無的項

/_s 匹配空格或斷行 /_

元字元 說明

/* 匹配 * 字元。

/. 匹配 . 字元。

// 匹配 / 字元。

// 匹配 / 字元。

/[ 匹配 [ 字元。

表示位置的符號

元字元 說明

$ 匹配行尾

^ 匹配行首

/< 匹配單詞詞首

/> 匹配單詞詞尾

替換變數

在正規表示式中使用 /( 和 /) 符號括起正規表示式,即可在後面使用/1、/2等變數來訪問 /( 和 /) 中的內容。

懶惰模式

/ 與/一樣,盡可能少次數地重複

/ 匹配它前面的項一次或0次, 盡可能地少

/| "或"操作符

/& 並列

函式式

:s/替換字串//=函式式

在函式式中可以使用 submatch(1)、submatch(2) 等來引用 /1、/2 等的內容,而submatch(0)可以引用匹配的整個內容。

與perl正規表示式的區別 ?

元字元的區別

vim語法 perl語法 含義

/+       +       1-任意個

/?       ?       0-1個

/      n-m個

/(和/)   (和)    分組

例如:1,去掉所有的行尾空格:「:%s//s/+$//」。「%」表示在整個檔案範圍內進行替換,「/s」表示空白字元(空格和製表符),「/+」對前面的字元匹配一次或多次(越多越好),「___fckpd___0rdquo;匹配行尾(使用「/___fckpd___0rdquo;表示單純的「___fckpd___0rdquo;字元);被替換的內容為空;由於一行最多隻需替換一次,不需要特殊標誌。這個還是比較簡單的。(/)

2,去掉所有的空白行:「:%s//(/s*/n/)/+//r/」。這回多了「/(」、「/)」、「/n」、「/r」和 「*」。「*」代表對前面的字元(此處為「/s」)匹配零次或多次(越多越好;使用「/*」表示單純的「*」字元),「/n」代表換行符,「/r」代表回車符,「/(」和「/)」對表示式進行分組,使其被視作乙個不可分割的整體。因此,這個表示式的完整意義是,把連續的換行符(包含換行符前面可能有的連續空白字元)替換成為乙個單個的換行符。唯一很特殊的地方是,在模式中使用的是「/n」,而被替換的內容中卻不能使用「/n」,而只能使用「/r」。原因是歷史造成的,詳情如果有興趣的話可以檢視「:help nl-used-for-nul」。

3,去掉所有的「//」注釋:「:%s!/ s*//.*!!」。首先可以注意到,這兒分隔符改用了「!」,原因是在模式或字串部分使用了「/」字元,不換用其他分隔符的話就得在每次使用「/」字元本身時寫成「//」,上面的命令得寫成「:%s//s*.*//」,可讀性較低。命令本身倒是相當簡單,用過正規表示式的人估計都知道「.」匹配表示除換行符之外的任何字元吧。

4,去掉所有的「/* */」注釋:「:%s!/s*//*/_.//*//s*! !g」。這個略有點複雜了,用到了幾個不太常用的 vim 正規表示式特性。「/_.」匹配包含換行在內的所有字元;「/」表示前乙個字元可出現零次或多次,但在整個正規表示式可以匹配成功的前提下,匹配的字元數越少越好;標誌「g」表示一行裡可以匹配和替換多次。替換的結果是個空格的目的是保證像「int/* space not necessary around comments */main()」這樣的表示式在替換之後仍然是合法的。

:g/^/s*$/d    刪除只有空白的行

:s//(/w/+/)/s/+/(/w/+/)//2/t/1   將 data1 data2 修改為 data2 data1

:%s//(/w/+/), /(/w/+/)//2 /1/    將 doe, john 修改為 john doe

:%s////=line(".")   將各行的 id 字串替換為行號

:%s//(^//)//=(line(".")-10) .".". submatch(1)   

將每行開頭的單詞替換為(行號-10).單詞的格式,如第11行的word替換成1. word

排序 :/ob/+1,$!sort

vim 正規表示式

vim正規表示式 vim中的正規表示式功能很強大,如果能自由運用,則可以完成很多難以想象的操作。如果你比較熟悉perl的正規表示式,可以直接參照 與perl正規表示式的區別 一節。使用正規表示式的命令 使用正規表示式的命令最常見的就是 搜尋 命令。其格式如下 正規表示式 另乙個很有用的命令就是 s ...

Vim正規表示式

vim中的正規表示式功能很強大,如果能自由運用,則可以完成很多難以想象的操作。如果你比較熟悉perl的正規表示式,可以直接參照與perl正規表示式的區別 一節。使用正規表示式的命令最常見的就是 搜尋 命令。其格式如下 正規表示式另乙個很有用的命令就是 s 替換 命令,將第乙個 之間的正規表示式替換成...

vim 正規表示式

vim中的正規表示式功能很強大,如果能自由運用,則可以完成很多難以想象的操作。如果你比較熟悉perl的正規表示式,可以直接參照與perl正規表示式的區別 一節。使用正規表示式的命令最常見的就是 搜尋 命令。其格式如下 正規表示式另乙個很有用的命令就是 s 替換 命令,將第乙個 之間的正規表示式替換成...