很多朋友都用過(guò)或者正在用UltraEdit,這個(gè)編輯器陪伴我也好幾年了,從很多地方影響著我寫代碼的快捷鍵習(xí)慣,Ultraedit提供了非常豐富的編輯功能,其中非常重要的查找和替換功能一定大家都用過(guò),UltraEdit正則表達(dá)式的查找替換功能非常方便和強(qiáng)大,可以在單獨(dú)文件里面查找替換。
正則表達(dá)式 (UltraEdit Syntax):
% 匹配行首 - 表明要搜索的字符串一定在行首.
$ 匹配行尾 - 表明要搜索的字符串一定在行尾
? 匹配除換行符外的任一單個(gè)字符.
* 匹配任意個(gè)數(shù)的字符出現(xiàn)任意次數(shù)(不包括換行符)
+ 匹配前導(dǎo)字符或者表達(dá)式出現(xiàn)一次或者更多次(不包括換行符)
++ 匹配前導(dǎo)字符或者表達(dá)式不出現(xiàn)或者出現(xiàn)一次以上(不包括換行符)
^b 匹配頁(yè)中斷符
^p 匹配DOS文件的換行符
^r 匹配MAC文件的換行符(CR Only)
^n 匹配UNIX文件的換行符 (LF Only)
^t 匹配一個(gè)制表符
[ ] 匹配方括號(hào)中的單個(gè)的字符
常用正則表達(dá)式:
刪除空行: 替換 %[ ^t]++^p 為 空串
刪除行尾空格: 替換 [ ^t]+$ 為 空串
刪除行首空格: 替換 %[ ^t]+ 為 空串
每行設(shè)置為固定的4個(gè)空格開(kāi)頭: 替換 %[ ^t]++^([~ ^t^p]^) 為 " ^1"
每段設(shè)置為固定的4個(gè)空格開(kāi)頭: 替換 %[ ^t]+ 為 " "
(如果一行是以空格開(kāi)始的,則視之為一段的開(kāi)始行)
將一段合并為一行: 替換 [ ^t]++^p^([~ ^t^p]^) 為 ^1
(注意: 此處假定文本是以DOS方式回車換行 - CR/LF)
去掉HTML TAG: 替換 ^{<*>^}^{<*^p*>^} 為 空串
刪除HTML中的所有<A>: 替換 <[ ]++a *[ ]++href[ ]++=*> 為 空串
刪除文本中指定的前2列字符: 替換 %?? 為 空串
在第4列后插入2列空白字符: 替換 %^(????^)^(?^) 為 "^1 ^2"
查找所有的數(shù)字: [0-9]+[.]++[0-9]+
查找所有的單詞: [a-z]+
查找所有的網(wǎng)址: http://[a-z0-9^~`_./^-^?=&]+
注意: 替換的時(shí)候需要勾選使用正則表達(dá)式選項(xiàng)
在UltraEdit配置中的正則表達(dá)式引擎中挑上使用UltraEdit風(fēng)格,13版本使用Unix風(fēng)格不能使用正則表達(dá)式分組功能
語(yǔ)法集合一:
符號(hào) 功能
% 匹配行的開(kāi)始 - 顯示搜索字符串必須在行的開(kāi)始,但是在所選擇的結(jié)果字符串中不包括任何行終止字符。
$ 匹配行尾 - 顯示搜索字符串必須在行尾,但是在所選擇的結(jié)果字符串中不包括任何行終止字符。
? 除了換行符以外匹配任何單個(gè)的字符
* 除了換行符匹配任何數(shù)量的字符和數(shù)字
+ 前一字符匹配一個(gè)或多個(gè),但至少要出現(xiàn)一個(gè)
++ 前一字符匹配零個(gè)或多個(gè),但至少要出現(xiàn)一個(gè)
^b 匹配一個(gè)分頁(yè)
^p 匹配一個(gè)換行符(CR/LF)(段)(DOS文件)
^r 匹配一個(gè)換行符(CR 僅僅)(段)(MAC 文件)
^n 匹配一個(gè)換行符 ( LF 僅僅 )( 段 )( UNIX 文件 )
^t 匹配一個(gè)標(biāo)簽字符TAB
[] 匹配任何單個(gè)的字符,或在方括號(hào)中的范圍
^{A^}^{ B^} 匹配表達(dá)式A或 B
^ 重載其后的正規(guī)表達(dá)式字符
^(^) 括或標(biāo)注為用于替換命令的表達(dá)式。
一個(gè)正則表達(dá)式最多可以有9個(gè)標(biāo)注表達(dá)式, 按正規(guī)表達(dá)式的需要而定。
相應(yīng)的替換表達(dá)式是 ^x , 替換范圍x是1-9。例如:
If ^(h*o^) ^(f*s^) matches “hello folks”,
^2 ^1 would replace it with “folks hello”.
(hello folks 將被替換成 folks hello。)
注: ^ 是實(shí)際字符 ^不是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] 匹配每個(gè)小寫元音。
[,.?] 匹配一文字的 “,”,”.”或 “?”。
[0-9, a-z] 匹配任何數(shù)位,或小寫字母。
[~0-9] 除了數(shù)字以外匹配任何字符 (~ 意味著”不”)
你按如下方式可以查找一個(gè)表達(dá)式A或 B :
“^{John^}^{Tom^}”
這將在找John或Tom的出現(xiàn)。應(yīng)該在 2 個(gè)表達(dá)式之間沒(méi)有任何東西。
你可以在同一搜索中按如下方式組合A or B and C or D:
“^{John^}^{Tom^}^{Smith^}^{Jones^}”
這將在John or Tom 后面找 Smith or Jones。
語(yǔ)法二:”Unix”句法類型的正則表達(dá)式
符號(hào) 功能
\ 標(biāo)記下一個(gè)字符作為一個(gè)特殊的字符。
"n" 匹配字符"n"。"n" 一個(gè)換行符或換行符字符。
^ 匹配/定位行的開(kāi)始。
$ 匹配/定位行的尾。
* 匹配前面的字符零次或多次。例
+ 匹配前面的字符一次或多次。例
. 匹配除了一個(gè)換行符字符匹配任何單個(gè)的字符。
(expression)標(biāo)注用于替換命令的表達(dá)式。一個(gè)正則表達(dá)式根據(jù)需要,最多可以有9個(gè)標(biāo)注表達(dá)式。相應(yīng)的代替表達(dá)式是 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] 一個(gè)字符集。匹配在方括號(hào)之間的任何字符。
[^xyz] 一個(gè)否定的字符集。不匹配在方括號(hào)之間的任何字符。
\d 匹配一個(gè)數(shù)字字符。等價(jià)于[0-9]。
\D 匹配一個(gè)非數(shù)字字符。等價(jià)于[^0-9]。
\f 匹配一個(gè)換頁(yè)字符。
\n 匹配一個(gè)換行字符。
\r 匹配一個(gè)回車符字符。
\s 匹配任何空白的空格, 標(biāo)簽, 換頁(yè), 包括空格等等,但不匹配換行符。
\S 匹配任何非空白的字符,但不匹配換行符。
\t 匹配一個(gè)標(biāo)簽TAB字符。
\v 匹配一個(gè)垂直的標(biāo)簽字符。
\w 匹配任何詞語(yǔ)字符包括下劃線。
\W 匹配任何非詞語(yǔ)字符字符。
注: ^ 是實(shí)際字符 ^不是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] 匹配每個(gè)小寫元音。
[,.?] 匹配一文字的 “,”,”.”或 “?”。
[0-9,a-z] 匹配任何數(shù)位,或小寫字母。
[^0-9] 除了數(shù)字以外匹配任何字符 (~ 意味著”不”)
你按如下方式可以查找一個(gè)表達(dá)式A或 B :
“(John)|(Tom)”
這將在找John或Tom的出現(xiàn)。應(yīng)該在 2 個(gè)表達(dá)式之間沒(méi)有任何東西。
你可以在同一搜索中按如下方式組合A or B and C or D:
“(John|Tom) (Smith|Jones)”
這將在John or Tom 后面找 Smith or Jones。
另外:
p 匹配 CR/LF ( 作為 rn 的一樣 ) 作為DOS行結(jié)束符匹配
如果查找/替換功能中正則表達(dá)式?jīng)]有選用,則替換字段中下列字符也是有效的:
符號(hào) 功能
^^ 匹配一個(gè) “^” 字符
^s 替換為被選擇 ( 加亮 ) 活躍的文件窗口的文章。
^c 替換為剪貼板的內(nèi)容
^b 匹配一個(gè)頁(yè)裂縫
^p 匹配一個(gè)換行符 ( CR/LF )( 段 )( DOS 文件)
^r 匹配一個(gè)換行符 ( CR 僅僅 )( 段 )( MAC 文件)
^n 匹配一個(gè)換行符 ( LF 僅僅 )( 段 )( UNIX 文件)
^t 匹配一個(gè)標(biāo)簽TAB字符
Ultraedit正則式實(shí)例:
下面是我要實(shí)現(xiàn)的一段代碼查詢替換的舉例
有這樣一段代碼分布在各個(gè)html文件中
代碼如下:
<!-- Copyright ?2014. toplee Ltd -->
<style>
A.applink:hover {border: 2px dotted #DCE6F4;padding:2px;background-color:#ffff00;color:green;text-decoration:none}
A.applink {border: 2px dotted #DCE6F4;padding:2px;color:#2F5BFF;background:transparent;text-decoration:none}
A.info {color:#2F5BFF;background:transparent;text-decoration:none}
A.info:hover {color:green;background:transparent;text-decoration:underline}
</style>
<div style='BORDER: 1px solid #DCE6F4; MARGIN-TOP: 20px; MARGIN-BOTTOM: 20px; MARGIN-LEFT: 5px;
.... 省略若干行....
<!-- /Copyright ?2014. toplee Ltd -->
我要把上面一段代碼替換為空,于是編寫下面的匹配規(guī)則
<!– Copyright[^!]*[^>]*>
即完成了全部替換。
UltraEdit正則表達(dá)式實(shí)例:
有個(gè)將Excel中的數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫(kù)中的需求,原本想到用程序讀取Excel中的數(shù)據(jù)并存儲(chǔ)到數(shù)據(jù)庫(kù)中,但經(jīng)一哥們的提醒,說(shuō)用 EditPlus或UltraEdit這樣的工具直接將數(shù)據(jù)拼湊成SQL插入語(yǔ)句更容易方便,也不用寫任何代碼,由于我本人使用UltraEdit,故考 慮用UltraEdit的正則表達(dá)式來(lái)做這件事,下面是這樣的一個(gè)過(guò)程。
假設(shè)導(dǎo)入的表字段為:name,email, introduce,在Excel中的數(shù)據(jù)對(duì)應(yīng)的也是這樣的字段,值得注意的是:在excel中的數(shù)據(jù),比如introduce不能換行,不然的話語(yǔ)句拼湊后會(huì)執(zhí)行會(huì)出錯(cuò)。
要拼湊的例子數(shù)據(jù)如下(從Excel中拷貝并粘貼到UltraEdit中):
張三 zhangsan@zihou.com "坐于2004年5月經(jīng)教育部批準(zhǔn)升格為普通本科院校。 " 李四 lisi@zihou.com 最專業(yè)的圖文視頻體育賽事直播、報(bào)道和‘專家'點(diǎn)評(píng)。
各字段值之間以一個(gè)或多個(gè)tab鍵分隔著,操作步驟:
替換按Ctrl+R
1、 先將單引號(hào)、雙引號(hào)之類的字符去掉,這一步不用正則,簡(jiǎn)單替換即可。
2、 去掉空行:用正則%[ ^t]++^p替換為空字符串,另外,還有^p$也可以,不過(guò)在替換的時(shí)候,^p$每次只能替換一個(gè)空行。
3、 在每行的最前面增加:insert into test(name,email,introduce)values(‘,在UltraEdit正則中,%是表示行首,如下圖:
4、 替換掉tab鍵
5、 最后在行尾加入’);
OK,大功告成!這樣就拼湊成了正常的SQL插入語(yǔ)句了,感覺(jué)是不是很快很容易?
正則表達(dá)式 (UltraEdit 語(yǔ)法):
符號(hào) | 功能 |
% | 匹配行首 – 表示搜索字符串必須在行首,但不包括任何選定的結(jié)果字符中的行終止字符。 |
$ | 匹配行尾 – 表示搜索字符串必須在行尾,但不包括任何選定的結(jié)果字符中的行終止字符。 |
? | 匹配任何除換行符的字符。 |
* | 匹配任何除換行符外所出現(xiàn)的任意數(shù)量的字符。 |
+ | 匹配一個(gè)或多個(gè)前面的字符/表達(dá)式。必須找到至少一個(gè)出現(xiàn)的字符。不匹配重復(fù)的換行符。 |
++ | 0 次或多次匹配前面的字符/表達(dá)式。不匹配重復(fù)的換行符。 |
^b | 匹配一個(gè)分頁(yè)符。 |
^p | 匹配一個(gè)換行符 (CR/LF) (段落) (DOS 文件) |
^r | 匹配一個(gè)換行符 (僅 CR) (段落) (MAC 文件) |
^n | 匹配一個(gè)換行符 (僅 LF) (段落) (UNIX 文件) |
^t | 匹配一個(gè)制表符 |
[ ] | 匹配任何括號(hào)中的單個(gè)字符或范圍 |
^{A^}^{B^} | 匹配表達(dá)式 A 或 B |
^ | 忽略其后的正則表達(dá)式字符 |
^(*^) | 在表達(dá)式加上括號(hào)或標(biāo)簽在替換命令中使用。正則表達(dá)式中可以有 9 個(gè)表達(dá)式標(biāo)簽,數(shù)字根據(jù)它們?cè)谡齽t表達(dá)式中的次序確定數(shù)字。 相應(yīng)的替換表達(dá)式是 ^x,x 的范圍是 1-9。例如: 如果 ^(h*o^) ^(f*s^) 匹配“hello folks”,那么^2 ^1 表示將用“folks hello”替換它。 |
注意 – ^ 這里涉及的字符“^”不是控制鍵 + 值。
例如:
m?n 匹配“man”、“men”、“min”,但不匹配“moon”。
t*t 匹配“test”、“tonight”和“tea time”中的“tea t”部分,但不匹配“tea
time” (“tea ”和“time”之間有換行)。
Te+st 匹配“test”、“teest”、“teeeest”等,但不匹配“tst”。
[aeiou] 匹配每個(gè)元音小寫字母
[,.?] 匹配文字“,”、“.”或“?”。
[0-9a-z] 匹配任何數(shù)字或小寫字母
[~0-9] 匹配除數(shù)字外的任何字符 (~ 表示不匹配其后的內(nèi)容)
你可以搜索象下面一樣的表達(dá)式 A 或 B:
“^{John^}^{Tom^}
這將搜索 John 或 Tom。在兩個(gè)表達(dá)式之間應(yīng)該沒(méi)有任何其它內(nèi)容。
你可以在同一次搜索象下面一樣組合 A 或 B 和 C 或 D:
“^{John^}^{Tom^} ^{Smith^}^{Jones^}”
這將搜索后面跟隨了 Smith 或 Jones 的 John 或 Tom。
下面的表顯示“Unix”樣式的正則表達(dá)式語(yǔ)法。
正則表達(dá)式 (Unix 語(yǔ)法):
符號(hào) | 功能 |
\ | 表示下一個(gè)字符有特殊含義。“n”表示匹配字符“n”,“\n”匹配一換行符�?聪旅娴睦� (\d、\f、\n 等)。 |
^ | 匹配/停駐行首。 |
$ | 匹配/停駐行尾。 |
* | 匹配前面的字符 0 次或多次。 |
+ | 匹配前面的字符一次或多次。不匹配重復(fù)的換行符。 |
. | 匹配任何除換行符之外的單個(gè)字符。不匹配重復(fù)的換行符。 |
(表達(dá)式) | 在表達(dá)式加上括號(hào)或標(biāo)簽在替換命令中使用。正則表達(dá)式中可以有 9 個(gè)表達(dá)式標(biāo)簽,數(shù)字根據(jù)它們?cè)谡齽t表達(dá)式中的次序確定數(shù)字。 相應(yīng)的替換表達(dá)式是 ^x,x 的范圍是 1-9。例如: 如果 ^(h*o^) ^(f*s^) 匹配“hello folks”,那么^2 ^1 表示將用“folks hello”替換它。 |
[xyz] | 字符集,匹配任何括號(hào)間的字符。. |
[^xyz] | 排除字符集。匹配任何不在括號(hào)間的字符。 |
\d | 匹配一個(gè)數(shù)字字符。等同于 [0-9]。 |
\D | 匹配一個(gè)非數(shù)字字符,等同于 [^0-9]。 |
\f | 匹配一個(gè)換頁(yè)符。 |
\n | 匹配一個(gè)換行符。 |
\r | 匹配一個(gè)回車符。 |
\s | 匹配任何包含空格、制表符等不會(huì)顯示的字符,但不匹配換行符。 |
\S | 匹配任何非空白區(qū)域 (顯示字符) 的字符,但不匹配換行符。 |
\t | 匹配一個(gè)制表符。 |
\v | 匹配一個(gè)垂直制表符。 |
\w | 匹配任何包含下劃線的詞語(yǔ)。 |
\W | 匹配任何非詞語(yǔ)的字符。 |
\p | 匹配 CR/LF (等同于 \r\n),用來(lái)匹配 DOS 行終止符。 |
注意 – ^ 這里所涉及的字符“^”不是控制鍵 + 值。
例如:
m.n 匹配“man”、“men”、“min”,但不匹配“moon”。
Te+st 匹配“test”、“teest”、“teeeest”等,但不匹配“tst”。
Te*st 匹配“test”、“teest”、“teeeest”等,還有“tst”。
[aeiou] 匹配每個(gè)元音小寫字母
[,.?] 匹配文字“,”、“.”或“?”。
[0-9a-z] 匹配任何數(shù)字或小寫字母
[^0-9] 匹配除數(shù)字外的任何字符 (~ 表示不匹配其后的內(nèi)容)
你可以象下面一樣的表達(dá)式 A 或 B 進(jìn)行搜索:
“(John|Tom)”
這將搜索 John 或 Tom。在兩個(gè)表達(dá)式之間應(yīng)該沒(méi)有任何其它內(nèi)容。
你可以在同一次搜索象下面一樣組合 A 或 B 和 C 或 D:
“(John|Tom) (Smith|Jones)”
這將搜索 Smith 或 Jones 以及跟隨在后面的 John 或 Tom。
如果在查找/替換中沒(méi)有選擇使用正則表達(dá)式,在替換對(duì)象中下列特殊字符同樣有效:
符號(hào) | 功能 |
^^ | 匹配字符“^” |
^s | 表示活動(dòng)文件窗口中選定 (加亮) 的文字。 |
^c | 表示剪貼表的內(nèi)容。 |
^b | 匹配一個(gè)分頁(yè)符。 |
^p | 匹配一個(gè)換行符 (CR/LF) (段落) (DOS 文件) |
^r | 匹配一個(gè)換行符 (僅 CR) (段落) (MAC 文件) |
^n | 匹配一個(gè)換行符 (僅 LF) (段落) (UNIX 文件) |
^t | 匹配一個(gè)制表符 |
注意 – ^ 這里所涉及的字符“^”不是控制鍵 + 值。