1. 程式人生 > >正則表示式應用替換/刪除/校驗/測試技巧

正則表示式應用替換/刪除/校驗/測試技巧

正則表示式應用替換/刪除/校驗/測試技巧

例項目錄

【1】 正則表示式應用——替換指定內容到行尾 【2】 正則表示式應用——數字替換 【3】 正則表示式應用——刪除每一行行尾的指定字元 【4】 正則表示式應用——替換帶有半形括號的多行 【5】 正則表示式應用——刪除空行 【6】 正則表示式應用——例項應用

應用例項

【1】正則表示式應用——替換指定內容到行尾 原始文字如下面兩行 abc aaaaa 123 abc 444 希望每次遇到“abc”,則替換“abc”以及其後到行尾的內容為“abc efg” 即上面的文字最終替換為: abc efg 123 abc efg 解決: ① 在替換對話方塊,查詢內容裡輸入“abc.*”,替換內容輸入為“abc efg” ② 同時勾選“正則表示式”
複選框
,然後點選“全部替換”按鈕 其中,符號的含義如下: “.” =匹配任意字元 “*” =匹配0次或更多 注意:其實就是正則表示式替換,這裡只是把一些曾經提出的問題加以整理,單純從正則表示式本身來說,就可以引申出成千上萬種特例。 【2】正則表示式應用——數字替換 希望把 asdadas123asdasdas456asdasdasd789asdasd 替換為: asdadas[123]asdasdas[456]asdasdasd[789]asdasd 在替換對話方塊裡面,勾選“正則表示式”複選框; 在查詢內容裡面輸入“([0-9])([0-9])([0-9])”,不含引號 “替換為:”裡面輸入“[\1\2\3]”,不含引號 ####備註####:查詢([0-9]+) 替換:[\1] 更簡單通用些 範圍為你所操作的範圍,然後選擇替換即可。 實際上這也是正則表示式的使用特例,“[0-9]”表示匹配0~9之間的任何特例,同樣“[a-z]”就表示匹配a~z之間的任何特例 上面重複使用了“[0-9]”,表示連續出現的三個數字 括號用來選擇原型,進行分組,替換時要用 “\1”代表第一個“[0-9]”對應的原型,“\2”代表第二個“[0-9]”對應的原型,依此類推 “[”|“]”為單純的
字元
,表示新增“[”或“]”,如果輸入“其它\1\2\3其它”,則替換結果為: asdadas其它123其它asdasdas其它456其它asdasdasd其它789其它asdasd 功能增強: 如果將查詢內容“[0-9][0-9][0-9]”改為“[0-9]*[0-9]”,對應1 或 123 或 12345 或 ... 大家根據需要定製 相關內容還有很多,可以自己參考正則表示式的語法仔 【3】正則表示式應用——刪除每一行行尾的指定字元 因為這幾個字元在行中也是出現的,所以肯定不能用簡單的替換實現 比如 12345 1265345 2345 需要刪除每行末尾的“345” 這個也算正則表示式的用法,其實仔細看正則表示式應該比較簡單,不過既然有這個問題提出,說明對正則表示式還得有個認識過程,解決方法如下 解決: 在替換對話方塊中,啟用“正則表示式”
複選框
在查詢內容裡面輸入“345$” 這裡“$”表示從行尾匹配 如果從行首匹配,可以用“^”來實現,不過 EditPlus 有另一個功能可以很簡單的刪除行首的字串 a. 選擇要操作的行 b. 編輯-格式-刪除行註釋 c. 在彈出對話方塊裡面輸入要清除的行首字元,確定 【4】正則表示式應用——替換帶有半形括號的多行 幾百個網頁中都有下面一段程式碼: <script LANGUAGE="JavaScript1.1"> <!-- htmlAdWH('93163607', '728', '90'); //--> </SCRIPT> 我想把它們都去掉,可是找了很多search & replace的軟體,都是隻能對“一行”進行操作。 EditPlus 開啟幾百個網頁檔案還是比較順暢的,所以完全可以勝任這個工作。 具體解決方法,在 Editplus 中使用正則表示式,由於“(”、“)”被用做預設表示式(或者可以稱作子表示式)的標誌,所以查詢 “<script LANGUAGE="JavaScript1.1">\n<!--\nhtmlAdWH('93163607', '728', '90'.);\n//-->\n</SCRIPT>\n” 時會提示查詢不到,所以也就無法進行替換了,這時可以把“(”、“)”使用任意字元標記替代,即半形句號:“.”。替換內容為 <script LANGUAGE="JavaScript1.1">\n<!--\nhtmlAdWH.'93163607', '728', '90'.;\n//-->\n</SCRIPT>\n 在替換對話方塊啟用“正則表示式”選項,這時就可以完成替換了 補充: 對( ) 這樣的特殊符號,應該用\( \)來表示,這也是很標準的regexp語法,可以寫為 <script LANGUAGE="JavaScript1.1">\n<!--\nhtmlAdWH\('93163607', '728', '90'\);\n//-->\n</SCRIPT>\n 【5】正則表示式應用——刪除空行 啟動EditPlus,開啟待處理的文字型別檔案。 ①、選擇“查詢”選單的“替換”命令,彈出文字替換對話方塊。選中“正則表示式”複選框,表明我們要在查詢、替換中使用正則表示式。然後,選中“替換範圍”中的“當前檔案”,表明對當前檔案操作。 ②、單擊“查詢內容”組合框右側的按鈕,出現下拉選單。 ③、下面的操作新增正則表示式,該表示式代表待查詢的空行。(技巧提示:空行僅包括空格符製表符、回車符,且必須以這三個符號之一作為一行的開頭,並且以回車符結尾,查詢空行的關鍵是構造代表空行的正則表示式)。 直接在"查詢"中輸入正則表示式“^[ \t]*\n”,注意\t前有空格符。 (1)選擇“從行首開始匹配”,“查詢內容”組合框中出現字元“^”,表示待查詢字串必須出文本中一行的行首。 (2)選擇“字元在範圍中”,那麼在“^”後會增加一對括號“[]”,當前插入點在括號中。括號在正則表示式中表示,文字中的字元匹配括號中任意一個字元即符合查詢條件。 (3)按一下空格鍵,新增空格符。空格符是空行的一個組成成分。 (4)選擇“製表符”,新增代表製表符的“\t”。 (5)移動游標,將當前插入點移到“]”之後,然後選擇“匹配 0 次或更多”,該操作會新增星號字元“*”。星號表示,其前面的括號“[]”內的空格符或製表符,在一行中出現0個或多個。 (6)選擇“換行符”,插入“\n”,表示回車符。 ④、“替換為”組合框保持空,表示刪除查詢到的內容。單擊“替換”按鈕逐個行刪除空行,或單擊“全部替換”按鈕刪除全部空行(注意:EditPlus有時存在“全部替換”不能一次性完全刪除空行的問題,可能是程式BUG,需要多按幾次按鈕)。 【6】 正則表示式應用——例項應用 1.驗證使用者名稱和密碼:("^[a-zA-Z]\w{5,15}$")正確格式:"[A-Z][a-z]_[0-9]"組成,並且第一個字必須為字母6~16位; 2.驗證電話號碼:("^(\d{3,4}-)\d{7,8}$")正確格式:xxx/xxxx-xxxxxxx/xxxxxxxx; 3.驗證手機號碼:"^1[3|4|5|7|8][0-9]\\d{8}$"; 4.驗證身份證號(15位或18位數字):"\d{14}[[0-9],0-9xX]"; 5.驗證Email地址:("^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$"); 6.只能輸入由數字和26個英文字母組成的字串:("^[A-Za-z0-9]+$"); 7.整數或者小數:^[0-9]+([.][0-9]+){0,1}$ 8.只能輸入數字:"^[0-9]*$"。 9.只能輸入n位的數字:"^\d{n}$"。 10.只能輸入至少n位的數字:"^\d{n,}$"。 11.只能輸入m~n位的數字:"^\d{m,n}$"。 12.只能輸入零和非零開頭的數字:"^(0|[1-9][0-9]*)$"。 13.只能輸入有兩位小數的正實數:"^[0-9]+(\.[0-9]{2})?$"。 14.只能輸入有1~3位小數的正實數:"^[0-9]+(\.[0-9]{1,3})?$"。 15.只能輸入非零的正整數:"^\+?[1-9][0-9]*$"。 16.只能輸入非零的負整數:"^\-[1-9][0-9]*$"。 17.只能輸入長度為3的字元:"^.{3}$"。 18.只能輸入由26個英文字母組成的字串:"^[A-Za-z]+$"。 19.只能輸入由26個大寫英文字母組成的字串:"^[A-Z]+$"。 20.只能輸入由26個小寫英文字母組成的字串:"^[a-z]+$"。 21.驗證是否含有^%&',;=?$\"等字元:"[%&',;=?$\\^]+"。 22.只能輸入漢字:"^[\u4e00-\u9fa5]{0,}$"。 23.驗證URL:"^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$"。 24.驗證一年的12個月:"^(0?[1-9]|1[0-2])$"正確格式為:"01"~"09"和"10"~"12"。 25.驗證一個月的31天:"^((0?[1-9])|((1|2)[0-9])|30|31)$"正確格式為;"01"~"09"、"10"~"29"和“30”~“31”。 26.獲取日期正則表示式:\\d{4}[年|\-|\.]\d{\1-\12}[月|\-|\.]\d{\1-\31}日? 評註:可用來匹配大多數年月日資訊。 27.匹配雙位元組字元(包括漢字在內):[^\x00-\xff] 評註:可以用來計算字串的長度(一個雙位元組字元長度計2,ASCII字元計1) 28.匹配空白行的正則表示式:\n\s*\r 評註:可以用來刪除空白行 29.匹配HTML標記的正則表示式:<(\S*?)[^>]*>.*?</>|<.*? /> 評註:網上流傳的版本太糟糕,上面這個也僅僅能匹配部分,對於複雜的巢狀標記依舊無能為力 30.匹配首尾空白字元的正則表示式:^\s*|\s*$ 評註:可以用來刪除行首行尾的空白字元(包括空格、製表符、換頁符等等),非常有用的表示式 31.匹配網址URL的正則表示式:[a-zA-z]+://[^\s]* 評註:網上流傳的版本功能很有限,上面這個基本可以滿足需求 32.匹配帳號是否合法(字母開頭,允許5-16位元組,允許字母數字下劃線):^[a-zA-Z][a-zA-Z0-9_]{4,15}$ 評註:表單驗證時很實用 33.匹配騰訊QQ號:[1-9][0-9]{4,} 評註:騰訊QQ號從10 000 開始 34.匹配中國郵政編碼:[1-9]\\d{5}(?!\d) 評註:中國郵政編碼為6位數字 35.匹配ip地址:([1-9]{1,3}\.){3}[1-9]。 評註:提取ip地址時有用 36.匹配MAC地址:([A-Fa-f0-9]{2}\:){5}[A-Fa-f0-9] Function IsRegu(Regu,s)

正則表示式校驗測試

If Regu="" Then Exit Function End if Dim Re,Sre Set Re = New RegExp Re.Pattern = Regu Sre = Re.Test(s) If Sre = True Then IsRegu = True Else IsRegu = False End If End Function tmp=" " if (IsRegu("\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*",tmp )) =false then msgbox "E-mail地址不合法 !" FieldCheck#N=false

正則表示式注意事項

不同的語言(如PHP和JAVA)、相同語言的不同類庫(如來自Sun的Java Regular Expression類庫跟Apache Jakarta的正則表示式類庫)間,用法會有所差別,在使用的時候,要注意這些差別。