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