11三月/110
C# 使用正規表示式搜尋和取代
前言
正規表示式(或稱正則表示式)在程式語言上一個很方便做字串處理的方式,各種程式語言也都有支援,只是它的規則撰寫是需要花點時間學習的,但是網路上可以找到許多的工具和網站都可以協助我們來寫規則式,這部份就不再多說了。本文主要是介紹在 C# 中要怎麼做搜尋和取代字串,每次都會忘記,給自己做個筆記一下囉!
實作
假設想要寫個將論壇常見的 BBCode 轉成 HTML 語法,該如何來實作呢?
字串範例:[url]http://asp.net/mvc/[/url]
搜尋
要找出字串中的連結,只需要用下列程式碼就可以把字串列出來了。其中我們將字串分組並且命名成 url ,其中 (?<url>) 部分便是命名群組的部份,此時只要用 match.Groups["url"].Value 就可以取出群組為 url 的值囉!也可以直接將全部符合條件的值都列印出來,但是要注意第一個群組是符合的字串,所以要取得值的話是第二個才是我們要的值。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
string Sentence = "[url]http://asp.net/mvc/[/url]"; string Pattern = @"\[url\](?<url>[ \S\t]*?)\[\/url\]"; if (Regex.IsMatch(Sentence, Pattern)) // 是否有符合的字串 { MatchCollection Matches = Regex.Matches(Sentence, Pattern); foreach (Match match in Matches) { Console.WriteLine(match.Groups["url"].Value); // 只取得群組名為 url 的值 GroupCollection groups = match.Groups; foreach (var group in groups) { Console.WriteLine(group.ToString()); } } } |
取代
上面範例可以取出符合的值,接下來是把符合的值轉換成 HTML 語法,只需要使用 Regex.Replace 就可以完成囉!
1 2 3 4 5 6 7 8 9 |
string Sentence = "[url]http://asp.net/mvc/[/url]"; string Pattern = @"\[url\](?<url>[ \S\t]*?)\[\/url\]"; string ReplacePattern = "<a href=\"$1\">$1</a>"; if (Regex.IsMatch(Sentence, Pattern)) // 是否有符合的字串 { string s = Regex.Replace(Sentence, Pattern, ReplacePattern); Console.WriteLine(s); } |
後記
正規表示式可以用在很多地方,比如說比對電子信箱是否輸入正確,電話號碼等等,這些在網路上都可以找到表示式的範例,重點就在於寫出規則式,這部份我也還在學習,也是要多嘗試才有辦法寫出想要的表示式,這部份就只能花時間去練習了。
Leave a comment