1. 程式人生 > >C#正則表示式快速入門

C#正則表示式快速入門

[介紹]
    作者將自己在學習正則表示式中的心得和筆記作了個總結性文章,希望對初學C#正則表示式的讀者有幫助。

[內容]
什麼是正則表示式

涉及的基本的類

正則表示式基礎知識

構建表示式基本方法

編寫一個檢驗程式

參考資料

[正文]
    對於初學者看到類似“/[email protected]/w+/./w{1,3}”這樣複雜沒有規律的字元,就會莫名產生一種恐懼感。其實正則表示式和字串(String)的使用同樣非常簡單。下面讓我們逐步地走進正則表示式的世界!

什麼是正則表示式
    正則表示式是用來檢驗和操作字串的強大工具。簡單的理解正則表示式可以認為是一種特殊的驗證字串。正則表示式常見運用是驗證使用者輸入資訊格式,比如上面的那組“/w{1,}@/w{1,}/./w{1”,實際上就是驗證郵件地址是否合法的;當然正則表示式不僅僅是用於驗證,可以說只要運用字串的地方都可以使用正則表示式;

涉及的基本的類
    正則表示式在英文中寫作(Regular Expression),根據正則表示式的使用範圍和單詞意思,.NET將其名稱空間設定為System.Text.RegularExpressions;

    在該名稱空間內包括了8個基本的類:Capture、CaptureCollection、Group、GroupCollection、Match、MatchCollection、Regex和RegexCompilationInfo如圖1所示;


圖1 MSDN Library中正則表示式名稱空間 


 Capture 用於單個表示式捕獲結果 

 CaptureCollection 用於一個序列進行字串捕獲 

 Group 表示單個捕獲的結果 

 GroupCollection 表示捕獲組的集會 

 Match 表示匹配單個正則表示式結果 

 MatchCollection 表示通過迭代方式應用正則表示式到字串中 

 Regex 表示不可變的正則表示式 

 RegexCompilationInfo 將編譯正則表示式需要提供資訊 

[注意]

    本文屬於初學正則表示式的入門文章,對於高階的分組(Group)及其涉及語法等在這裡不做介紹;

正則表示式基礎知識
基本語法

    在正則表示式中擁有一套自己的語法規則,常見語法包括;字元匹配、重複匹配、字元定位、轉義匹配和其他高階語法(字元分組、字元替換和字元決策);

    字元匹配語法:

 字元語法 語法解釋 語法例子 

 /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 匹配非空字元 ‘/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類中包括:IsMatch()、Replace()、Split()和Match的類;
(1) IsMatch()方法;
    IsMatch()方法實際上是一個返回Bool值得方法,如果測試字元滿足正則表示式返回True否則返回False;

例1;判斷是非成都地區電話號碼合法;
分析:成都地區電話號碼組成028********,前面為固定區號028,後面滿足8位數字;
設計正則表示式:028/d{8}(解釋:028區號固定,後面為8個數字/d組成);

程式程式碼,如圖2所示:

圖2 “例1” IsMatch方法是用例 



(2) Replace()方法;
    Replace()方法實際上是一種替換的方法,替換匹配正則表示式匹配模式;
例2:在釋出帶有公開電子郵件地址的文章時,替換@位AT避免產生垃圾郵件;
分析:首先需要判斷文章中電子郵箱地址,然後執行替換
設計正則表示式:判斷電子郵箱表示式”/w{1,}@w{1,}//.”;
程式程式碼:如圖3所示;

圖3 “例2”Replace方法是用例 

(3) Split()方法;
    Split()方法實際上是拆分的方法,根據匹配正則表示式進行拆分儲存在字串陣列中;

例3:從群發郵件地址中讀取所有郵件地址;
分析:群發郵件採用“;”作為分割符,需要通過“;”進行拆分
程式程式碼:如圖4所示; 

圖4 “例3”Split方法是用例 


構建表示式基本方法
    構造Regex物件的建構函式包括兩個過載,一個是不含引數的構造、另外一個是含有引數的建構函式;
基本形式Regex(string pattern);
過載形式Regex(string pattern,RegexOptions);

    補充:RegexOptions屬於列舉型別,包括IgnoreCase(忽略大小寫)、ReghtToLeft(從右向左)、None(預設)、CultureInvariant(忽略區域)、Multline(多行模式)和SingleLine(單行模式);

例4,建立一個合法ISBN驗證格式;
分析:ISBN格式為X-XXXXX-XXX-X;
正則表示式格式:/d-/d{5}-/d{3}-/d

構造該正則表示式函式Regex ISBNRegex = new Regex(表示式,引數為空)
詳細程式碼:如圖5所示;

圖5 “例4”構造驗證函式是用例 

編寫一個檢驗程式

    為了方便自己在學習正則表示式和快速檢驗自己編寫表示式語句是否正確,下面提供一個IsMatch()方法正則表示式驗證器編寫;
開啟VS.NET,選擇新建專案中的Visual C#專案的Windows應用程式,取名為“Regex_Tools”;
然後編寫如圖6所示的介面

圖6 正則表示式IsMatch方法驗證器 



然後在該窗體宣告中增加正則表示式名稱空間宣告using System.Text.RegularExpressions;
編寫下列程式碼
編寫一段私有的判斷引數的方法,如圖7所示;

圖7私有驗證引數判斷方法 



編寫判斷按鈕的方法,如圖8所示;

編寫清空按鈕的方法,所有的文字框等於空;
編譯該程式,一個簡單的正則表示式驗證器就成功生成了;

參考資料
《C#字串和正則表示式參考手冊》
《C#高階程式設計》

 

相關推薦

C#表示式快速入門

[介紹]    作者將自己在學習正則表示式中的心得和筆記作了個總結性文章,希望對初學C#正則表示式的讀者有幫助。[內容]什麼是正則表示式涉及的基本的類正則表示式基礎知識構建表示式基本方法編寫一個檢驗程式參考資料[正文]    對於初學者看到類似“/[email pr

表示式快速入門

在說正則表示式前先看一道題: 問題描述: 在給定字串中找出單詞 ( “單詞”由大寫字母和小寫字母字元構成,其他非字母字元視為單詞的間隔, 如空格、問號、數字等等;另外單個字母不算單詞);找到單詞後,按照長度進行降序排序, (排序時如果長度相同,則按

vb.net表示式快速入門(2)

6.使用?*或 進行重複?:告訴引擎匹配前導字元0次或一次。事實上是表示前導字元是可選的。(問號)  :告訴引擎匹配前導字元1次或多次(空格)*:告訴引擎匹配前導字元0次或多次(星號) <[A-Za-z][A-Za-z0-9]*> 匹配沒有屬性的HTML標籤,“ <”以及“>

vb.net表示式快速入門(1)

深入淺出之正則表示式    作者:lzmtw 注:JanGoyvaerts為RegexBuddy寫的教程的譯文 前言:半年前我對正則表示式產生了興趣,在網上查詢過不少資料,看過不少的教程,最後在使用一個正則表示式工具RegexBuddy時發現他的教程寫的非常好,可以說是我目前見過最好的正則表示式

表示式快速入門教程

由於評論裡有過長的URL,所以本頁排版比較混亂,推薦你到原處檢視,看完了如果有問題,再到這裡來提出.一些要說的話:如果你沒有正則表示式的基礎,請跟著教程“一步步來”。請不要大概地掃兩眼就說看不懂——以這種態度我寫成什麼樣你也看不懂。當我告訴你這是“30分鐘入門教程”時,請不要試圖在30秒內入門。事實是,我身邊

vb.net表示式快速入門(3)完

作者:lzmtw 10.選擇符正則表示式中“ ¦”表示選擇。 你可以用選擇符匹配多個可能的正則表示式中的一個。如果你想搜尋文字“cat”或“dog”,你可以用 < <cat¦dog> > 。 如果你想有更多的選擇,你只要擴充套件列表 <

C#表示式入門(下)

一、匹配郵政編碼,郵政編碼為6位數字組成。 string code; code = Console.ReadLine(); Regex reg = new Regex(@"^\d{6}$",RegexOptions.None); Console.WriteLine(reg.IsMat

C#表示式入門(中)

一、忽略匹配優先模式 *? 重複任意次,但儘可能少重複 +? 重複1次或更多次,但儘可能少重複 ?? 重複0次或1次,但儘可能少重複 {n,m}? 重複n到m次,但儘可能少重複 {n,}? 重複n次以上,但儘可能少重複   【例二】在滿足匹配時

C#表示式入門(上)

一、說明 使用正則表示式 需要包含名字空間using System.Text.RegularExpressions; .Net使用的是傳統型NFA引擎,.NET正則表示式流派概述 分類 舉例 字元縮略表示法

C# 表示式的一些語法筆記

基礎語法看這裡:正則表示式語法 下面是一些其他要注意的點…… 反斜槓 + 元字元 表示匹配元字元本身。 eg:元字元 . 表示除換行符以外的任意字元,而 \. 表示匹配 . 。 一般定義正則表示式字串時會加上 @,表示不轉義。 eg:string patt

C#表示式簡單總結

C#: c#中驗證正則表示式的類為System.Text.RegularExpressions.Regex 簡單的匹配方法為IsMatch(4個過載方法) 正則表示式語法: 一、匹配單個字元 [ ]:從中選擇一個字元匹配 如:單詞字元([ae])、非單詞

C# -- 表示式匹配字元之含義

原文: C# -- 正則表示式匹配字元之含義 C#正則表示式匹配字元之含義 1.正則表示式的作用:用來描述字串的特徵。 2.各個匹配字元的含義: .   :表示除\n以外的單個字元 [ ]  :表示在字元陣列[]中羅列出來的字元任意取單個 |   :表示“或”的意思

C# 表示式檢查輸入字元

public class Validator 2 { 3 #region 匹配方法 4 /// <summary> 5 /// 驗證字串是否匹配正則表示式描述的規則 6

C 表示式的完全匹配 部分匹配及忽略大小寫的問題

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

C#表示式提取HTML中IMG標籤的SRC地址

原文:http://blog.csdn.net/smeller/article/details/7108502 一般來說一個 HTML 文件有很多標籤,比如“<html>”、“<body>”、“<table>”等,想把文件中的 img 標籤提取出來並不

C#表示式Regex類的使用

C#中為正則表示式的使用提供了非常強大的功能,這就是Regex類。這個包包含於System.Text.RegularExpressions名稱空間下面,而這個名稱空間所在DLL基本上在所有的專案模板中都不需要單獨去新增引用,可以直接使用。 1、定義一個Regex類的例項

關於C#表示式MatchCollection類的總結

認識MatchCollection 類 表示通過以迭代方式將正則表示式模式應用於輸入字串所找到的成功匹配的集合。 名稱空間:  System.Text.RegularExpressions 屬性:Count  獲取匹配項的數目。  方法:ToString  返回表示當

nim語言的表示式regex入門

nim語言的re模組是包裝了c語言的庫pcre. 提供了很多的proc供呼叫. 主要的 函式就是find, findBounds, findAll 1. findBounds查詢某個規則的字串. 例如:  import re let currentline =

c++ 表示式之差點過不去的坎

  bool Config::DecodeLine(const string & data) { string strT = "(string)"; string intT = "(int)"; string floatT = "(float)"; string hex

python re庫(表示式入門

正則表示式(英文名稱:regular expression,regex,RE)是用來簡潔表達一組字串特徵的表示式。最主要應用在字串匹配中。 \d 數字:[0-9] \D 非數字: [^0-9] \s 空白字元:[ \t\n\x0B\f\r] \S 非空白字元:[^\s] \w 單詞字