作者|清洬
編輯|清洬
GVIM正則表達式
行文目錄
1 | 正則表達式介紹 |
2 | 基本命令 |
3 | 元字符 |
4 | 特殊字符 |
5 | 表示數量的元字符 |
6 | 表示位置的元字符 |
7 | 示例 |
01:正則表達式介紹
20世紀50年代,一位名叫Stephen Cole Kleene的美國數學家發表了規則的語言(regular language)的定義。規則的表達式就是用來描述規則的語言的表達式。后來發明UNIX的Ken Thompson借用這個概念并將它應用到了文本編輯器中。后面正則表達式的說法進入到了大家常用的vi、vim、gvim當中。
正則表達式在gvim、perl以及sed等情況中都可以使用。它可以幫助我們完成以下幾類工作:
①確認字符串是否匹配了某種模式
②把字符串中匹配了某種模式的內容捕獲出來
③把字符串中匹配的內容替換成指定的內容
下面進入正則表達式的世界中吧!掌握了它并能熟練運用的話,能完成很多難以想象的工作的哦!
02:基本命令
/ 搜索命令(例如 /正則表達式)
/ab 即為搜索字母組合ab
:s 替換命令
:s/正則表達式/替換字符串/選項
03:元字符
. | 匹配任意一個字符 |
[abc] | 匹配方括號中的任意一個字符,可以使用-表示字符范圍。如[a-z0-9]匹配小寫字母和0-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_] |
匹配 |
|
s | 匹配空白字符,等同于[ ] |
S | 匹配非空白字符,等同于[^ ] |
匹配回車符 |
04:特殊字符
* | 匹配 * 字符 |
. | 匹配 . 字符(注意與.的區別) |
/ | 匹配 / 字符 |
\ | 匹配 字符 |
[ | 匹配 [ 字符 |
05:表示數量的元字符
* | 匹配 0-任意個 |
+ | 匹配 1-任意個 |
? | 匹配 0-1個 |
{n,m} | 匹配n-m個 |
{n} | 匹配 n個 |
{n,} | 匹配 n-任意個 |
{,m} | 匹配 0-m個 |
06:表示位置的元字符
$ | 匹配 行尾 |
^ | 匹配 行首(區分[^abc],這個hat符號是在方括號里面) |
< | 匹配 單詞詞首 |
> | 匹配 單詞詞尾 |
07:示例
①:%s/[Aa]sic/ASIC/g
把所有單詞asic或者Asic都替換為ASIC。如圖
注意使用該命令后,只有第一行發生了變化。因為只有第一行符合匹配條件[Aa]sic。所以只有第一行被替換成了ASIC。
命令解讀:%s(substitute)為全局替換;[Aa]sic為匹配的內容;ASIC為替換的內容;g為global。
②:%s/ +/ /g
使用單個空格替換一個或多個空格。如下圖
使用命令后第一行的3個空格和第二行的2個空格均被1個空格所取代。
命令解讀:%s為全局替換;“︺+"為匹配1個或多個空格;‘︺’為替換的內容。g為global。︺代表空格。
③:[range]global/{pattern}/{command}
global命令在[range]指定的文本范圍內(缺省時為整個文件)查找{pattern},然后匹配到的行執行命令{command},如果希望對沒匹配上的執行命令,則使用global!或vglobal命令。
④:g/^[ ]*$/d
刪除所有的空行(沒有任何字符,除了一個回車符),如圖所示。
命令使用后,所有只有一個換行符的行都被刪掉。注意如果使用:g/^[ ]$/d則達不到效果。
⑤:g/asic/d
刪除含有asic字符的行,如下圖
因為只有第一行有asic,所以第一行被刪掉了。
⑥:%s/^ *//g
刪除每行的所有的前導空格,如下圖
每一行開頭的所有空格都會被刪掉。*表示匹配0-任意個數量。//表示不用內容代替,即刪除的意思
⑦:%s/^/*/g
在文件中的每一行的開始插入*字符,如下圖
如果想在特定行插入的話,可以改成下面形式
:18,20s/^/*/g 即在18-20行的開頭插入*字符。
⑧:%s/^d.*$//g
刪除以數字開頭的行,如下圖
刪除效果,只保留了沒有數字開頭的后兩行。.*組合表示匹配任意多個任意字符。比較常用!
⑨:%s/^[a|b|c].*$//g
刪除以a或者b或者c開頭的行,如下圖
以a,b,c開頭的行被刪除掉。在區分大小寫的情況下。(set noic設置區分大小寫)
⒑:%s/^abc.*$//g
刪除以abc開頭的行,如下圖
這個命令只刪除了以abc開頭的行,區別于第9條命令。
⒒:%s/^(.*) 1$/1/g
將兩行重復行壓縮成一行,如下圖
命令解讀:從行首(^)開始,匹配任意字符(.*),然后匹配換行符( ),第二行匹配與括號內內容相同(1),到行尾($)。替換的內容為括號((.*))內的內容。
12 :%s/^(.*)(n1)+$/1/g
將多行重復行壓縮成一行,如下圖
1代表紅色括號的內容;如果有2則代表綠色括號中的內容。
13.:%s/(.*):(.*)/2:1/g
交換列表中所有以:分割的字符的順序,如下圖
以上就是正則表達式使用的一些例子。可以嘗試其他功能的正則表達式,比如大小寫替換,查找特定形式的字符等等。
審核編輯:湯梓紅
-
字符
+關注
關注
0文章
234瀏覽量
25393 -
命令
+關注
關注
5文章
715瀏覽量
22557 -
Gvim
+關注
關注
0文章
9瀏覽量
3086 -
正則表達式
+關注
關注
0文章
28瀏覽量
3619
原文標題:GVIM正則表達式
文章出處:【微信號:集成電路設計,微信公眾號:集成電路設計】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
什么是正則表達式?正則表達式如何工作?哪些語法規則適用正則表達式?

shell正則表達式學習
深入淺出boost正則表達式
關于java正則表達式的用法詳解
快速入門IPv6和正則表達式

Python正則表達式教程之標準庫的完整介紹及使用示例說明

python正則表達式中的常用函數
Linux入門之正則表達式

shell腳本基礎:正則表達式grep

評論