推 jacky59956:很謝謝你這篇好文章 01/06 13:00
關於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