正則表達式提供了功能強大、靈活而又高效的方法來處理文本。
正則表達式的全面模式匹配表示法使您可以快速分析大量文本以找到特定的字符模式;提取、編輯、替換或刪除文本子字符串;或將提取的字符串添加到集合以生成報告。
對于處理字符串的許多應用程序而言正則表達式是不可缺少的工具。
5.1 正則表達式簡介
正則表達式:用某種模式去匹配指定字符串的一種表示方式。正則表達式由普通字符和元字符組成。
普通字符:常使用的字符如字母、數字、漢字等
元字符:可以匹配某些字符形式的具有特殊含義的字符,其作用類似于DOS命令使用的通配符。
正則表達式基本書寫符號
正則表達式限定符
3. 匹配字符集
(1) 匹配字符集是預定義的用于正則表達式中的符號集。
(2) 如果字符串與字符集中的任何一個字符相匹配,它就會找到這個匹配項。
字符詳解請查看 正則表達式符號解釋
4. 分組構造
5. 正則表達式舉例
非負整數:“^\d+$ ”
正整數: “ ^[0-9]*[1-9][0-9]*$”
非正整數: “ ^((-\d+)|(0+))$”
整數: “ ^-?\d+$”
英文字符串: “ ^[A-Za-z]+$”
英文字符數字串: “ ^[A-Za-z0-9]+$”
英數字加下劃線串: “^\w+$”
E-mail地址:“^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$”
URL:“^[a-zA-Z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\s*)?$”
5.2 Regex類
Regex 類表示不可變(只讀)正則表達式類。它還包含各種靜態方法,允許在不顯式創建其他類的實例的情況下使用其他正則表達式類。
Regex 類在System.Text.RegularExpressions命名空間下。
這里僅介紹IsMatch方法。
IsMatch方法:正則表達式在輸入字符串中是否找到匹配項。
該方法有四種重載的形式:
public bool IsMatch(string str);
表示在構造函數中指定的正則表達式在str中是否找到匹配項。
public bool IsMatch(string str, int start);
表示在構造函數中指定的正則表達式在str的指定起始位置開始是否找到匹配項。參數start表示開始搜索的字符位置。
public static bool IsMatch(string str, string pattern);
表示使用pattern參數中指定的正則表達式是否在str中找到匹配項。
public static bool IsMatch(string str, string pattern, RegexOptions options);
表示使用pattern參數中指定的正則表達式和options枚舉提供的匹配選項在input中是否找到匹配項。其中options是RegexOption枚舉值的按位“或”組合。
例:
Regex r = new Regex(@"[0-9a-z]{3,5}");
string[] tests = ...{"abc", "123456", "(aa22bb33)", "ab"};
foreach (string test in tests)
...{
if (r.IsMatch(test))
...{
Console.WriteLine("{0}中有匹配的項", test);
}
else
...{
Console.WriteLine("{0}中沒有匹配的項", test);
}
}
5.3 Match類
Match類表示單個正則表達式匹配操作的結果,得到的結果是只讀的。該類沒有公共構造函數,而是用Regex對象的Match方法返回的結果創建該類的對象。
例如:
Regex r = new Regex("abc");
Match m = r.Match("123abc456");
if (m.Success)
...{
Console.WriteLine("找到匹配位置:" + m.Index);
Console.WriteLine("找到匹配結果:" + m.Value);
}
運行結果:
找到匹配位置:3
找到匹配結果:abc
5.4 MatchCollection類
MatchCollection類表示成功的非重疊匹配的序列,得到的集合是只讀的。該類同樣沒有公共構造函數,而是用Regex.Matches方法返回的結果創建該類的對象。
例如:
Regex r = new Regex("abc");
MatchCollection mc = r.Matches("123abc4abcd");
int count = mc.Count;
String[] results = new String[count];
int[] matchPosition = new int[count];
for (int i = 0; i < count; i++)
...{
results[i] = mc[i].Value;
matchPosition[i] = mc[i].Index;
Console.WriteLine("第{0}個匹配結果:{1},位置:{2}",i+1, results[i], matchPosition[i]);
}
運行結果:
第1個匹配結果:abc,位置:3
第2個匹配結果:abc,位置:7
5.5 Group類
Group類表示單個捕獲組的結果。當與正則表達式匹配的子字符串有多組時,可以使用該類得到某一組的結果。例如:
string text = "One car red car blue car";
string pat = @"(w+)s+(car)";
Regex r = new Regex(pat, RegexOptions.IgnoreCase);
Match m = r.Match(text);
int matchCount = 0;
while (m.Success)
...{
Console.WriteLine("Match" + (++matchCount));
for (int i = 1; i <= 2; i++)
...{
Group g = m.Groups[i];
Console.WriteLine(string.Format("Group{0}='{1}'", i, g));
CaptureCollection cc = g.Captures;
for (int j = 0; j < cc.Count; j++)
...{
Capture c = cc[j];
Console.WriteLine(string.Format(
"Capture{0}='{1}', Position={2}", j, c, c.Index));
}
}
m = m.NextMatch();
}
Console.ReadLine();
輸出結果:
Match1
Group1='One'
Capture0='One', Position=0
Group2='car'
Capture0='car', Position=4
Match2
Group1='red'
Capture0='red', Position=8
Group2='car'
Capture0='car', Position=12
Match3
Group1='blue'
Capture0='blue', Position=16
Group2='car'
Capture0='car', Position=21
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/ddafei/archive/2007/06/08/1643209.aspx
浙公網安備 33010602011771號