Regex在英文中寫作(Regular Expression),根據Regex的使用範圍和單詞意思,.NET將其命名空間設定為System.Text.RegularExpressions;
Capture |
用於單個運算式捕獲結果 |
CaptureCollection |
用於一個序列進行字串捕獲 |
Group |
表示單個捕獲的結果 |
GroupCollection |
表示擷取的群組的集會 |
Match |
表示匹配單個Regex結果 |
MatchCollection |
表示通過迭代方式應用Regex到字串中 |
Regex |
表示不可變的Regex |
RegexCompilationInfo |
將編譯Regex需要提供資訊 |
Regex基礎知識
基本文法
在Regex中擁有一套自己的文法規則,常見文法包括;字元匹配、重複匹配、字元定位、轉義匹配和其他進階文法(字元分組、字元替換和字元決策);
字元匹配文法:
字元文法 |
文法解釋 |
文法例子 |
\d |
匹配數字(0~9) |
‘\d’匹配8,不匹配12; |
\D |
匹配非數字 |
‘\D’匹配c,不匹配3; |
\w |
匹配任意單字元 |
‘\w\w’ 匹配A3,不匹配@3; |
\W |
匹配非單字元 |
‘\W’匹配@,不匹配c; |
\s |
匹配空白字元 |
‘\d\s\d’匹配3 d,不匹配abc; |
\S |
匹配非Null 字元 |
‘\S\S\S’匹配A#4,不匹配3 d; |
. |
匹配任一字元 |
‘....’匹配A$ 5,不匹配換行; |
[…] |
匹配括弧中任一字元 |
[b-d]匹配b、c、d, 不匹配e; |
[^…] |
匹配非括弧字元 |
[^b-z]匹配a,不匹配b-z的字元; |
重複匹配文法:
重複文法 |
文法解釋 |
文法例子 |
{n} |
匹配n次字元 |
\d{3}匹配\d\d\d,不匹配\d\d或\d\d\d\d |
{n,} |
匹配n次和n次以上 |
\w{2}匹配\w\w和\w\w\w以上,不匹配\w |
{n,m} |
匹配n次上m次下 |
\s{1,3}匹配\s,\s\s,\s\s\s,不匹配\s\s\s\s |
? |
匹配0或1次 |
5?匹配5或0,不匹配非5和0 |
+ |
匹配一次或多次 |
\S+匹配一個以上\S,不匹配非一個以上\S |
* |
匹配0次以上 |
\W*匹配0以上\W,不匹配非N*\W |
字元定位文法:
重複文法 |
文法解釋 |
文法例子 |
^ |
定位後面模式開始位置 |
|
$ |
前面模式位於字串末端 |
|
\A |
前面模式開始位置 |
|
\z |
前面模式結束位置 |
|
\Z |
前面模式結束位置(換行前) |
|
\b |
匹配一個單詞邊界 |
|
\B |
匹配一個非單詞邊界 |
|
轉義匹配文法:
義文法 |
涉及字元(文法解釋) |
文法例子 |
“\”+實際字元 |
\ . * + ? | ( ) { }^ $ |
例如:\\匹配字元“\” |
\n |
匹配換行 |
|
\r |
匹配斷行符號 |
|
\t |
匹配水平定位字元 |
|
\v |
匹配垂直定位字元 |
|
\f |
匹配換頁 |
|
\nnn |
匹配一個8進位ASCII |
|
\xnn |
匹配一個16進位ASCII |
|
\unnnn |
匹配4個16進位的Uniode |
|
\c+大寫字母 |
匹配Ctrl-大寫字母 |
例如:\cS-匹配Ctrl+S |
構造正則表達的方法
構造Regex需要涉及Regex類,在Regex類中包括:IsMatch()、Replace()、Split()和Match的類;
(1) IsMatch()方法:
IsMatch()方法實際上是一個返回Bool值得方法,如果測試字元滿足Regex返回True否則返回False;
例1;判斷是非成都地區電話號碼合法
分析:成都地區電話號碼組成028********,前面為固定區號028,後面滿足8位元字;
設計Regex:028\d{8}(解釋:028區號固定,後面為8個數字\d組成);
(2) Replace()方法
Replace()方法實際上是一種替換的方法,替換匹配Regex匹配模式;
例2:在發布帶有公開電子郵件地址的文章時,替換@位AT避免產生垃圾郵件;
分析:首先需要判斷文章中電子郵箱地址,然後執行替換
設計Regex:判斷電子郵箱運算式”\w{1,}@w{1,}\\.”;
(3) Split()方法
Split()方法實際上是拆分的方法,根據匹配Regex進行拆分儲存在字串數組中;
例3:從群發郵件地址中讀取所有郵件地址;
分析:群發郵件採用“;”作為分割符,需要通過“;”進行拆分
構建運算式基本方法
構造Regex對象的建構函式包括兩個重載,一個是不含參數的構造、另外一個是含有參數的建構函式;
- 基本形式Regex(string pattern);
- 重載形式Regex(string pattern,RegexOptions);
補充:RegexOptions屬於枚舉類型,包括IgnoreCase(忽略大小寫)、ReghtToLeft(從右向左)、None(預設)、CultureInvariant(忽略地區)、Multline(多行模式)和SingleLine(單行模式);
例4,建立一個合法ISBN驗證格式;
分析:ISBN格式為X-XXXXX-XXX-X;
Regex格式:\d-\d{5}-\d{3}-\d
構造該Regex函數Regex ISBNRegex = new Regex(運算式,參數為空白)
例5、一個複雜的檔案夾格式判斷運算式(包含“\”、空格等特殊符號的應用)
private void button16_Click(object sender, EventArgs e){ Regex reg = new Regex("\\w*\\\\\\w{8}\\-\\w*\\s\\w*\\s\\w*\\~\\s\\w*"); String str = "資料\\20010202-課程 數學 1100~ 許孜孜"; MessageBox.Show(reg.IsMatch(str).ToString());}