看板 Visual_Basic 關於我們 聯絡資訊
關於VB的正規表示式(regular expression; regexp; regex,都是同一個東西) VB6不用看了,太單純了,看help就差不多了 XD 但是.NET的正規表示式就已經提升到其他主要語言的水準 以下有一篇一流文件可以參考 黑暗執行緒BBS: 被遺忘的文字利器—探索.NET Regular Expression元件 http://blog.darkthread.net/files/folders/871/download.aspx 順便貼一下裡面列出的 .NET regex symbols 以後寫到不會寫還可以來這裡翻 :P 1. 比對字串中如有用到. $ ^ { [ ( | ) * + ? \等字串,要記得用方括號 夾起來[]。 例如: 要比對NT$, 要寫成NT[$]。 2. 比較常用的特殊字元有\r、\n、\t(Tab)等。 3. 最主要的比對符號如下: . \n換行符號以外的所有字元,若設為Singleline模式,則代表 任何字元。 [aeiou] 表示方括號中的任一個字元均可以,此例表示a、e、i、o或u的 任一個字元均可。 [^aeiou] 表示這五個字元以外的任何字元均可。 [0-9a-fA-F] 若是相連的字元,可使用-連字線來表示,0-9就表示0,1,2,3, 4,5,6,7,8,9均可。 \w 所有的文數字,英文字母、中文字及數字再加上底線字元。 \W 和\w剛好相反,所有不是文數字的字元。 \s 所有的空白(white-space)字元,相當於空白、\f、\n、\r、 \t、\v等不會顯現的字元。 \S 與\s相反,不屬於\s的所有字元。 \d 所有的數字(0-9)。 \D 所有的非數字。 4. 比對時也可指定出現的位置, ^ 出現在字串的開頭。(受Multiline選項影響) $ 出現在字串的結尾。(受Multiline選項影響) \A 出現在整個字串的開頭。(不受Multiline選項影響) \Z 出現在整個字串的結尾。(後方仍可接一個\n,不受Multiline 選項影響) \z 出現在整個字串的結尾。(後方不可接任何字元,不受Multiline 選項影響) 註: 所謂Multiline選項,主要在字串中有換行符號時會發生差別,可在呼叫 函數時設定參數,而筆者則較常直接加在比對字串的前方(即所謂的inline character)。例如: string sML="Item1 is a dog.\nItem2 is a cat.\n Item3 is a mouse.\n"; MessageBox.Show(Regex.IsMatch(sML,"^Item2"). ToString()); MessageBox.Show(Regex.IsMatch(sML,"(?m)^Item2"). ToString()); 其中Inline Character (?m)就是啟用了Multiline選項 ,所以第一個測詴傳回False,第二個則傳回True,這個例子應該就可 以清楚的解釋Multiline選項的影響。同時這裡再補充兩個常用的選項, i=Ignore Case不分大小寫,s=Single Line則決定.符號是否包含\n。 5. 比對符號可以指定出現的次數,如以下的說明: * 出現0次或多次,相當於{0,}。 + 出現1次以上,相當於{1,}。 ? 出現0次或1次,相當於{0,1}。 {n} 出現正好n次。例如: (pizza){2} -> “pizzapizza”就符合比對。 {n,} 最少出現n次,例如: (abc){2,}. {n,m} 最少出現n次,但不超過m次。 *? +? ?? {n}? {n,}? {n,m}? 當有多種符合的可能時,以最少數目的為準,例如: 比對”123ABC” 字串,如果用”\d*”可得123,若用”\d*?”則得到1,其餘的 意義可類推。英文稱為Lazy *, Lazy +, Lazy ?...   -- 從前有個馬鈴薯王國 有個高貴偉大的國王 有的人尊敬他 有的人畏懼他 但有個人敢看不起他不只是一條龍 嘿呵 快出動 去征服 去擺平 嘿呵 快出征 去征服那條龍 嘿呵 快出動 (宰了它!轟了它!) 嘿呵 快出征 去征服那條龍 Potatoes and Dragons (C)Alphanim France 2004-05 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.120.168.228
jacky59956:很謝謝你這篇好文章 01/06 13:00