除了 asp教程.net 驗證控制項,在.net 中使用Regex的大多數情況都要使用 system.text.regularexpressions 命名空間中發現的類。特別是那些您希望熟悉的主類 regex、match 和 matchcollection。
順便說一下,Regex縮寫樣式 regex 的發音究竟是 /reg-eks/ 還是 /rej-eks/,還有一些爭議。本人傾向於後者,但兩種發音都有專家贊同,所以選擇哪個發音由您自己決定。
regex 類有大量的方法和屬性,如果您以前沒有用過它,可能會感到無所適從。下面匯總了一些最常用的方法:
方法 |
說明 |
escape / unescape |
字串中的轉義元字元,用作運算式中的文字。 |
ismatch |
如果Regex在輸入字串中發現匹配,返回“ture”。 |
match |
如果在輸入字串中發現匹配,則返回匹配對象。 |
matches |
如果在輸入字串中發現包含任何或全部匹配,則返回匹配集合對象。 |
replace |
用給定的替換字串替換輸入字串中的匹配。 |
split |
將輸入字串拆分成用Regex匹配分開的數組元素時,返回數組字串。 |
除了指定很多方法外,還有一些選項可以指定,通常在 regex 物件建構函數中。由於這些選項是位屏蔽的一部分,或許可以同時指定這些選項(如,可以同時指定 multiline 和 singleline)。
方法 |
說明 |
compiled |
當在迴圈中執行許多匹配操作時使用此選項。這可以節省每一迴圈的分析運算式步驟。 |
multiline |
它與輸入字串中的行數沒有關係。確切地說,它只修改 ^ 和 $ 的方式,以便匹配行開始 (bol) 和行結尾 (eol),而不是匹配整個輸入字串的開始和結尾。 |
ignorecase |
使模式在匹配搜尋字串時忽略大小寫。 |
ignorepatternwhitespace |
允許根據需要在模式中包括任意數量的空白地區,也支援使用 (?# 注釋 #) 文法在模式中加入注釋。 |
singleline |
它與輸入字串中的行數沒有關係。更確切地說,它將導致 .(句點)元字元匹配任一字元,而不是除 n 之外的任一字元(預設情況)。 |
使用Regex常執行的操作包括:驗證、匹配和替換。大多數情況下,可以使用 regex 類的靜態方法完成這些操作,不需要執行個體化 regex 類本身。要執行驗證,全部要做的就是必建或找到正確的運算式,然後使用 regex 類的 ismatch() 方法將運算式應用到輸入字串中。例如,下面的函數示範了如何使用Regex驗證郵遞區號:
private void validatezipbutton_click(object sender, system.eventargs e){ string zipregex = @"^d{5}$"; if(regex.ismatch(ziptextbox.text, zipregex)) { resultlabel.text = "zip is valid!"; } else { resultlabel.text = "zip is invalid!"; }}
類似的,可以使用靜態 replace() 方法將匹配替換為特定字串,如下所示:
string newtext = regex.replace(inputstring, pattern, replacementtext);
最後,可以使用如下代碼遍曆輸入字串的匹配集合:
private void matchbutton_click(object sender, system.eventargs e){ matchcollection matches = regex.matches(searchstringtextbox.text, matchexpressiontextbox.text); matchcountlabel.text = matches.count.tostring(); matcheslabel.text = ""; foreach(match match in matches) { matcheslabel.text += "found" + match.tostring() + " at position " + match.index + ".<br>"; }}
通常,在您需要指定預設以外的方式時,需要執行個體化 regex 類的執行個體。特別是在設定選項時。例如,要建立忽略大小寫和模式空白地區的 regex 執行個體,然後檢索與該運算式匹配的集合,則應使用如下代碼:
regex re = new regex(pattern, regexoptions.ignorecase | regexoptions.ignorepatternwhitespace);matchcollection mc = re.matches(inputstring);
本文的下載檔案中包括這些樣本的完整使用版本,與簡單 asp.net教程 頁中的一樣。