多少年來
此外
在這篇文章中
應該掌握的基礎知識
規則表達式的知識可能是不少編程人員
如果你沒有規則表達式方面的知識
RegularExpression組合體
regexp規則類包含在System
名字空間簡介
在名字空間中僅僅包含著
Capture: 包含一次匹配的結果
CaptureCollection: Capture的序列
Group: 一次組記錄的結果
Match: 一次表達式的匹配結果
MatchCollection: Match的一個序列
MatchEvaluator: 執行替換操作時使用的代理
Regex
Regex類中還包含一些靜態的方法
Escape: 對字符串中的regex中的轉義符進行轉義
IsMatch: 如果表達式在字符串中匹配
Match: 返回Match的實例
Matches: 返回一系列的Match的方法
Replace: 用替換字符串替換匹配的表達式
Split: 返回一系列由表達式決定的字符串
Unescape:不對字符串中的轉義字符轉義
簡單匹配
我們首先從使用Regex
Match m = Regex
我們現在有了一個可以用於測試的Match類的實例
如果想使用匹配的字符串
Console
這個例子可以得到如下的輸出: Match=abra
字符串的替換
簡單字符串的替換非常直觀
string s = Regex
它返回字符串zzzzcadzzzz
現在我們來看一個比較復雜的字符串替換的例子
string s = Regex
這個語句返回字符串abra
上面的模式對於刪除任意字符串中的前導和後續空格都非常有用
匹配引擎的細節
現在
string text =
string pat = @
( # 第一個組的開始
abra # 匹配字符串abra
( # 第二個組的開始
cad # 匹配字符串cad
)? # 第二個組結束(可選)
) # 第一個組結束
+ # 匹配一次或多次
//利用x修飾符忽略注釋
Regex r = new Regex(pat
//獲得組號碼的清單
int[] gnums = r
//首次匹配
Match m = r
while (m
{
//從組
for (int i =
{
Group g = m
//獲得這次匹配的組
Console
//計算這個組的起始位置和長度
CaptureCollection cc = g
for (int j =
{
Capture c = cc[j];
Console
+
}
}
//下一個匹配
m = m
}
這個例子的輸出如下所示
Group
Capture
Capture
Group
Capture
Group
Capture
Capture
Group
Capture
Group
Capture
Capture
Group
Capture
我們首先從考查字符串pat開始
現在我們來看看匹配過程中發生的情況
然後
接下來是完成第一次匹配
我們跟蹤每個group中的CaptureCollection
基於過程和基於表達式方法的比較
一般情況下
對於我們大多數用戶而言
基於過程的模式
我們在編程中經常需要用到的一個功能是對字符串中的一部分進行匹配或其他一些對字符串處理
string text =
System
string result =
string pattern = @
foreach (Match m in Regex
{
// 取得匹配的字符串
string x = m
// 如果第一個字符是小寫
if (char
// 變成大寫
x = char
// 收集所有的字符
result += x;
}
System
正象上面的例子所示
text=[the quick red fox jumped over the lazy brown dog
result=[The Quick Red Fox Jumped Over The Lazy Brown Dog
基於表達式的模式
完成上例中的功能的另一條途徑是通過一個MatchEvaluator
static string CapText(Match m)
{
//取得匹配的字符串
string x = m
// 如果第一個字符是小寫
if (char
// 轉換為大寫
return char
return x;
}
static void Main()
{
string text =
lazy brown dog
System
string pattern = @
string result = Regex
new MatchEvaluator(Test
System
}
同時需要注意的是
常用表達式
為了能夠更好地理解如何在C#環境中使用規則表達式
羅馬數字
string p
string t
Match m
交換前二個單詞
string t
string p
Regex x
string r
關健字=值
string t
string p
Match m
實現每行
string t
+
+
string p
Match m
月/日/年 小時:分:秒的時間格式
string t
string p
Match m
改變目錄(僅適用於Windows平台)
string t
string r
擴展
string t
string p
string r
刪除C語言中的注釋(有待完善)
string t
/*
* 傳統風格的注釋
*/
string p
/\* # 匹配注釋開始的定界符
\*/ # 匹配注釋結束定界符
string r
刪除字符串中開始和結束處的空格
string t
string p
string r
string t
string p
string r
在字符\後添加字符n
string t
string r
轉換IP地址
string t
string p
@
@
@
@
Match m
刪除文件名包含的路徑
string t
string p
string r
聯接多行字符串中的行
string t
a split line
string p
string r
提取字符串中的所有數字
string t
test
test
test
string p
MatchCollection mc
找出所有的大寫字母
string t
string p
MatchCollection mc
找出小寫的單詞
string t
string p
MatchCollection mc
找出第一個字母為大寫的單詞
string t
string p
MatchCollection mc
找出簡單的HTML語言中的鏈接
string t
<html>
<a
<a
</html>
string p
MatchCollection mc
From:http://tw.wingwit.com/Article/program/net/201311/12195.html