早就聽說了正規表示式的強大,於是花了一點點時間從網down了幾篇文件看了一下。
剛開始看到正規表示式時,感覺全是一堆稀奇古怪的字元,有點無從下手的感覺,看完了文件後。
仔細一想,不過如此。無賴一直感嘆無用武之地。近日,導師接一專案,要我改**。面對一堆
混亂不堪的**,我無比頭大。到專案要提交的時候,**已經被改得面目全非,由於是多人修改,
所以每個人在除錯的時候都留下了不同的注釋。但提交的**中不能有這些無用的注釋啊。於是乎,
我想到了用正規表示式。
由於**中的無用注釋都是以這樣的形式出現:
//sjdjfjla
// ldjsfpqij
//jsdlfjopw
於是只需要用正規表示式將這樣的**替換即可,經過一番嘗試:
:%s /^/t/.*/n//g
但是上面的**只能在乙個檔案中執行替換,如何把所有的檔案都替換掉呢?
:args *.c //只有一層目錄,如果有子目錄,使用args **/*.c
:argdo %s/^/t/.*/n//ge | update
輸入以上**,即可將這些無用的注釋清理掉,改起來又快又好。這下**看起來好多了。
在此總結一下常用的查詢和替換命令:
n關於查詢和替換
ø簡單替換表示式
替換命令可以在全文中用乙個單詞替換另乙個單詞:
:%s/four/4/g
"%" 範圍字首表示在所有行中執行替換。最後的"g" 標記表示替換行中的所有匹配點。如果僅僅對當前行進行操作,那麼只要去掉%即可
:%s//
顯然,這樣在處理"fourty" 的時候還是會出錯。用"/>" 來解決這個問題:
:%s///4/g
如果你在編碼,你可能只想替換注釋中的"four",而保留**中的。由於這很難指定,可以在替換命令中加乙個"c" 標記,這樣,vim 會在每次替換前提示你:
:%s///4/gc
ø刪除多餘的空格
要刪除這些每行後面多餘的空格,可以執行如下命令:
:%s//s/+$//
命令前面指明範圍是"%",所以這會作用於整個檔案。"substitute" 命令的匹配模式是
"/s/+$"。這表示行末($)前的乙個或者多個(/+)空格(/s)。替換命令的"to" 部分是空的:"//"。這樣就會刪除那些匹配的空白字元。
ø3,匹配重複性模式
星號項"*" 規定在它前面的項可以重複任意次。因此:
/a*匹配"a","aa","aaa",等等。但也匹配"" (空字串),因為零次也包含在內。星號"*" 僅僅應用於那個緊鄰在它前面的項。因此"ab*" 匹配"a","ab","abb","abbb",等等。如要多次重複整個字串,那麼該字串必須被組成乙個項。組成一項的方法就是在它前面加"/(",後面加"/)"。因此這個命令:
//(ab/)*
匹配: "ab","abab","ababab",等等。而且也匹配""。
要避免匹配空字串,使用"/+"。這表示前面一項可以被匹配一次或多次。
/ab/+
匹配"ab","abb","abbb",等等。它不匹配 後面沒有跟隨"b" 的"a"。
要匹配乙個可選項,用"/="。 例如:
/folders/=
匹配"folder" 和"folders"。
ø4,指定重複次數
要匹配某一項的特定次數重複,使用"/" 這樣的形式。其中"n" 和"m" 都是數字。在它前面的那個項將被重複"n" 到"m" 次(|inclusive| 包含"n" 和"m")。例如:
/ab/
匹配"abbb","abbbb" 以及"abbbbb"。
當"n" 省略時,被預設為零。當"m" 省略時,被預設為無限大。當",m" 省略時,就表示重複正好"n" 次。例如:
模式匹配次數
/ 0,1,2,3 或4
/ 3,4,5,等等
/ 0 或1,同/=
/ 0 或 更多,同*
/ 1 或 更多,同/+
/ 3
ø5,多選一匹配
在乙個查詢模式中,"或" 運算子是"/|"。例如:
/foo/|bar
這個命令匹配了"foo" 或"bar"。更多的抉擇可以連在後面:
/one/|two/|three
匹配"one","two" 或"three"。
如要匹配其多次重複,那麼整個抉擇結構須置於"/(" 和"/)" 之間:
//(foo/|bar/)/+
這個命令匹配"foo","foobar","foofoo","barfoobar",等等。
再舉個例子:
/end/(if/|while/|for/)
這個命令匹配"endif","endwhile" 和"endfor"。
正規表示式 正規表示式 總結
非負整數 d 正整數 0 9 1 9 0 9 非正整數 d 0 負整數 0 9 1 9 0 9 整數 d 非負浮點數 d d 正浮點數 0 9 0 9 1 9 0 9 0 9 1 9 0 9 0 9 0 9 1 9 0 9 非正浮點數 d d 0 0 負浮點數 正浮點數正則式 英文本串 a za z...
正規表示式 表示式
網域名稱 a za z0 9 a za z0 9 a za z0 9 a za z0 9 interneturl a za z s 或 http w w w 手機號碼 13 0 9 14 5 7 15 0 1 2 3 5 6 7 8 9 18 0 1 2 3 5 6 7 8 9 d 號碼 x x x...
Linux正規表示式 編寫正規表示式
為了所有實用化的用途,你可以通過使用程式產生正確的結果。然而,並不意味著程式總是如你所願的那樣正確地工作。多數情況下,如果程式不能產生想要的輸出,可以斷定真正的問題 排除輸入或語法錯誤 在於如何描述想要的東西。換句話說,應該考慮糾正問題的地方是描述想要的結果的表示式。表示式不完整或者公式表示得不正確...