標籤:
很多朋友都用過或者正在用UltraEdit,這個編輯器陪伴我也好幾年了,從很多地方影響著我寫代碼的快速鍵習慣,Ultraedit提供了非常豐富的編輯功能,其中非常重要的尋找和替換功能一定大家都用過,Ultraedit提供的尋找替換功能非常方便和強大,可以在單獨檔案裡面尋找替換,也可以在多個檔案、多個目錄裡面進行尋找替換。而我們在使用這些尋找替換功能的時候,一 LiveJournal Tags: UltraEdit,Regex 般都是針對某個字串進行,前兩天我要對一個目錄下(包含子目錄)所有的html檔案中某一段代碼進行尋找替換,一下子不知道怎麼操作了,由於長期寫程式用到Regex,於是猜想具備如此強大功能的Ultraedit一定也有這樣類似的匹配功能,於是點擊Help一看,果然不出所料,Ultraedit支援基本的Regex匹配尋找和替換功能,這能滿足我們幾乎全部的需要了。
下面是對UltraEdit的Help中針對尋找替換使用Regex部分的整理,最後還有我前兩天用到的一個多行代碼尋找替換的例子。
Ultraedit在使用Regex進行尋找替換時有兩個可使用的文法集合。一個是 UltraEdit 的更早的版本被使用的原來的 UltraEdit 句法。另一個是”Unix”類型的Regex,這個集合在ultraedit的預設配置中是沒有啟用的,需要在配置中找到search項,啟用Unix類型的Regex。
文法集合一:
符號 功能
% 匹配行的開始 - 顯示搜尋字串必須在行的開始,但是在所選擇的結果字串中不包括任何行終止字元。
$ 匹配行尾 - 顯示搜尋字串必須在行尾,但是在所選擇的結果字串中不包括任何行終止字元。
? 除了分行符號以外匹配任何單個的字元
* 除了分行符號匹配任何數量的字元和數字
+ 前一字元匹配一個或多個,但至少要出現一個
++ 前一字元匹配零個或多個,但至少要出現一個
^b 匹配一個分頁
^p 匹配一個分行符號(CR/LF)(段)(DOS檔案)
^r 匹配一個分行符號(CR 僅僅)(段)(MAC 檔案)
^n 匹配一個分行符號 ( LF 僅僅 )( 段 )( UNIX 檔案 )
^t 匹配一個標籤字元TAB
[] 匹配任何單個的字元,或在方括弧中的範圍
^{A^}^{ B^} 匹配運算式A或 B
^ 重載其後的正規運算式字元
^(^) 括或標註為用於替換命令的運算式。
一個Regex最多可以有9個標註運算式, 按正規運算式的需要而定。
相應的替換運算式是 ^x , 替換範圍x是1-9。例如:
If ^(h*o^) ^(f*s^) matches “hello folks”,
^2 ^1 would replace it with “folks hello”.
(hello folks 將被替換成 folks hello。)
註: ^ 是實際字元 ^不是Ctl + 索引值。
例如:
m?n 匹配 “man”,”men”,”min” 但不匹配 “moon”.
t*t 匹配 “test”,”tonight” 和 “tea time” (the “tea t” portion) 但不匹配 “tea
time” (newline between “tea ” and “time”).
Te+st 匹配 “test”,”teest”,” teeeest “等等。但是不匹配 “tst”。
[aeiou] 匹配每個小寫母音。
[,.?] 匹配一文字的 “,”,”.”或 “?”。
[0-9, a-z] 匹配任何數位,或小寫字母。
[~0-9] 除了數字以外匹配任何字元 (~ 意味著”不”)
你按如下方式可以尋找一個運算式A或 B :
“^{John^}^{Tom^}”
這將在找John或Tom的出現。應該在 2 個運算式之間沒有任何東西。
你可以在同一搜尋中按如下方式組合A or B and C or D:
“^{John^}^{Tom^}^{Smith^}^{Jones^}”
這將在John or Tom 後面找 Smith or Jones。
文法二:”Unix”句法類型的Regex
符號 功能
\ 標記下一個字元作為一個特殊的字元。
"n" 匹配字元"n"。"n" 一個分行符號或分行符號字元。
^ 匹配/定位行的開始。
$ 匹配/定位行的尾。
* 匹配前面的字元零次或多次。例
+ 匹配前面的字元一次或多次。例
. 匹配除了一個分行符號字元匹配任何單個的字元。
(expression)標註用於替換命令的運算式。一個Regex根據需要,最多可以有9個標註運算式。相應的代替運算式是 x , x的範圍是 1-9 。
例如:
If (h.*o) (f.*s) matches "hello folks",
2 1 would replace it with "folks hello".
(hello folks 將被替換成 folks hello。)
[xyz] 一個字元集。匹配在方括弧之間的任何字元。
[^xyz] 一個否定的字元集。不匹配在方括弧之間的任何字元。
\d 匹配一個數字字元。等價於[0-9]。
\D 匹配一個非數字字元。等價於[^0-9]。
\f 匹配一個換頁字元。
\n 匹配一個換行字元。
\r 匹配一個斷行符號符字元。
\s 匹配任何空白的空格, 標籤, 換頁, 包括空格等等,但不匹配分行符號。
\S 匹配任何非空白的字元,但不匹配分行符號。
\t 匹配一個標籤TAB字元。
\v 匹配一個垂直的標籤字元。
\w 匹配任何詞語字元包括底線。
\W 匹配任何非詞語字元字元。
註: ^ 是實際字元 ^不是Ctl + 索引值。
例如:
m.n 匹配 “man”,”men”,”min” 但不匹配 “moon”.
t+t 匹配 “test”,”tonight” 和 “tea time” (the “tea t” portion) 但不匹配 “tea
time” (newline between “tea ” and “time”).
Te*st 匹配 “test”,”teest”,” teeeest “等等。但是不匹配 “tst”。
[aeiou] 匹配每個小寫母音。
[,.?] 匹配一文字的 “,”,”.”或 “?”。
[0-9,a-z] 匹配任何數位,或小寫字母。
[^0-9] 除了數字以外匹配任何字元 (~ 意味著”不”)
你按如下方式可以尋找一個運算式A或 B :
“(John)|(Tom)”
這將在找John或Tom的出現。應該在 2 個運算式之間沒有任何東西。
你可以在同一搜尋中按如下方式組合A or B and C or D:
“(John|Tom) (Smith|Jones)”
這將在John or Tom 後面找 Smith or Jones。
另外:
p 匹配 CR/LF ( 作為 rn 的一樣 ) 作為DOS行結束符匹配
如果尋找/替換功能中Regex沒有選用,則替換欄位中下列字元也是有效:
符號 功能
^^ 匹配一個 “^” 字元
^s 替換為被選擇 ( 加亮 ) 活躍的檔案視窗的文章。
^c 替換為剪貼簿的內容
^b 匹配一個頁裂縫
^p 匹配一個分行符號 ( CR/LF )( 段 )( DOS 檔案)
^r 匹配一個分行符號 ( CR 僅僅 )( 段 )( MAC 檔案)
^n 匹配一個分行符號 ( LF 僅僅 )( 段 )( UNIX 檔案)
^t 匹配一個標籤TAB字元
下面是我要實現的一段代碼查詢替換的舉例
我想把一個.lrc檔案中的漢字去掉:
[ti:046]
[ar:Book I]
[al:english900]
[la:zh]
[by:]
[00:00.00][4] Identifying objects.辨別物品
[00:00.00]
[00:00.01]What are these? 這些是什嗎?
[00:01.93]Those are books. 那些是書。
[00:03.87]Where are the books? 那些書在哪兒?
[00:06.13]There they are. 在那兒。
[00:08.68]These are my pencils. 這些是我的鉛筆。
[00:12.00]Where are your pens? 你的那些鋼筆在哪兒?
[00:14.85]They‘re over there. 在那裡。
[00:17.48]Are these your pens? 這些是你的鋼筆嗎?
[00:20.04]Yes,they are. 是我的。
[00:22.63]Those are mine. 那些是我的。
[00:25.39]These are your books,aren‘t they? 這些書是你的,對不對?
[00:28.35]No,they aren‘t. 不,不是。
[00:31.07]They‘re not mine. 不是我的。
[00:33.39]These are mine,and those are yours. 這些是我的,而那些是你的。
[00:35.57]Those aren‘t your pens,are they? 那些鋼筆不是你的,對吧?
[00:36.38]
點"搜尋"->"替換",選中"Regex"
尋找:^([/./?]^) ?++$
替換為:^1
點“全部替換”,完成。
大家可以在今後的編碼中嘗試一下Ultraedit的Regex尋找替換功能,非常簡單快捷
在UltraEdit的尋找和替換中使用Regex (轉)