C#Regex使用指引

來源:互聯網
上載者:User

    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());}
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.