/*
*為什麼會有這篇 因為有一天可愛的鐘逸學長在問帥氣的柏州學長(明顯在巴結人)一個有關正規表示式的問題時,被好像在專心念書,其實一直在觀察四週的我(偷?)聽到了,try to find a method but in vain的感覺很不好,所以複習一下正規表示式囉!
*/
[a-Z]: 表示a-z,A-Z其中"一個"字母
[^a-Z]:表示非a-z,A-Z其中之一
*:量詞,出現零次或一次以上
.: 表示任何一單一字元
^:列首
$:列尾
\< :單字開始處 \> : 單字結束處
[:album:] 任何字母與數字
[:alpha:] 任何字母
[:cntrl:] 任何控制字元
[:digit:] 任何數字
[:lower:]任何一小寫字母
[:upper:]任何一大寫字母
[:print:]任何一可印字元
[:space:]任何空格字元
=======
好用的:
:%s /pattern/&/g 可用來計算有幾個符合pattern的字串(&表示符合pattern的字串,故代換後不改變文章)
\([a-z]\{2}\)\{2,\}\3,5\}
:%s/\([^0-9]\{1,}\)
去除/*………*/c語言註解
:%s:\/\*\(.\{-}\)\s*\*\/:\1:g
去除//
:%s://::g
(喜歡想太多的人可以用:%s:\/\/\(.\{-\}\)\s\+:\1:g)
=======
Reference:
msdn:正規表示式介紹(中文)
Regular Expression Library
RegExLib
/**
後記:雖然問題已被解出來,但是我還是得承認我沒弄懂整個指令的來龍去脈....
其實問題很簡單:
--
A女:"不要嘛~"
"來啦~",B男低語著…(內容純屬虛構)
-------
Scenario:小說中的對話原本是用""雙引號標記的,但現在作者想改用[ ],像vi 這種支援正規表示式的editor可如何快速取代呢?
**/
9 則留言:
囧... 打錯
答案是
:%s/"\(.\{-}\)"/[\1]/g
原來是對話阿,還以為是人物名稱
謝侃侃~
=======
Google啊~你真可怕… says:
你第一個意見怎麼不見了
Rocky Kan-Ru @ 宿舍 says:
下面有解釋
Google啊~你真可怕… says:
\1 backslash加數字到底是什麼意思?
Google啊~你真可怕… says:
那時候就是不懂這個
Rocky Kan-Ru @ 宿舍 says:
\n 就是第 n 個 match group
Rocky Kan-Ru @ 宿舍 says:
一個 match group 是包含在 () 裡面的東西
Rocky Kan-Ru @ 宿舍 says:
在 vim 裡面 () 要寫成 \(\)
Google啊~你真可怕… says:
那我看學長用了\4
Google啊~你真可怕… says:
↑↑ 那我懂~~~
Rocky Kan-Ru @ 宿舍 says:
嗯
Rocky Kan-Ru @ 宿舍 says:
用 \4 ...
Rocky Kan-Ru @ 宿舍 says:
可能是用奇怪的方法吧
補充...
vim 的 regexp
http://larc.ee.nthu.edu.tw/~cthuang/vim/files/vim-regex/vim-regex.htm
ohoh~身為鄉民的我要打屁股了…lazybone
在Linux板有類似解答,我還跑去問侃侃。
---
(轉錄如下)
> 最近在用Vim寫程式,想請教幾個取代的問題
> 例如:
> sprintf("%s", g_caAlertMsg);
> 我想用vim去做一個一次取代
> ,其條件為在一行裡面找到第一個"時,將"取代為"[%s.%d]
> 找到第二個"時,取代成",__FILE__, __LINE__
> 結果應該為
> sprintf("[%s.%d]%s",__FILE__,__LINE__, g_caAlertMsg);
> 由於程式太多了,所以我想知道有沒有快速取代的方式?
> 希望不吝指教...謝謝
不懂, 如果要整行都 match 才換, 那就整行換就好了呀.
如果不管啥, 有 " " 都要換, 那你可以這樣用
:%s/"\([^"]*\)"/"[%s.%d]\1",__FILE__, __LINE__/
還是是 sprintf 的才要換??
%s/\(sprintf(\)"\([^"]*\)"/\1"[%s.%d]\2",__FILE__, __LINE__/
可以看一下 regular expression 的資料.
今天到lab用vim一試,it really works!
真的變成
========
A女:[不要嘛~]
[來啦~],B男低語著…(內容純屬虛構)
在 vim 裡面可以試試看 \v
這樣 pattern 會比較乾淨 :)
:%s/\v"(.{-})"/[\1]/g
對了可以看 :h pattern
\v 是 very magic
\V 是 no magic. 所以要用 escape 跳脫特殊比對字符
謝謝你。:D
這樣好像真的比較簡潔,也比較專業…XD
對了!我之前好像有偷看過你的網誌,剛看到你留言,小小害羞了一下:)
張貼留言