學習了C#中的Regex,自己嘗試了寫了一些提取相關資訊和匹配驗證,馬馬虎虎.
引用命名空間:
1 using System.Text.RegularExpressions;
案例1:驗證email地址:
註冊時常會用到email綁定,驗證email的合法性在此.
WinForm介面:
TextBox: txtemail;
Button: btnCheck;
btnCheck點擊事件:
1 private void btnCheck_Click(object sender, EventArgs e) 2 { 3 string i = txtemail.Text.Trim(); 4 Regex r = new Regex(@"^\w+@\w+.[a-z]+");//xx@xx.xx 5 if (r.IsMatch(i)) 6 { 7 MessageBox.Show("格式正確!"); 8 } 9 else10 {11 MessageBox.Show("格式錯誤!");12 }13 }
案例2:提取網頁源碼的ed2k連結:
(1)對VeryCD的備份中會用到提取連結,可以先遍曆網頁的id號;
(2)根據url擷取網頁源碼並利用Regex 提取ed2k連結 和對應的標題;
(3)存入listbox並寫入為txt文本.
關於這些 備份VeryCD 和RSS閱讀器 的相關實現會在後面研究.
WinForm介面:
TextBox: txtemail;
Button: btnCheck;
btnCheck點擊事件:
1 private void btngeted2k_Click(object sender, EventArgs e) 2 { 3 string i = txtemail.Text.Trim(); 4 Regex r = new Regex(@"[ed2k://|]{8}[a-z]+[|][^|]?\w+[.]+[^|]+[|]");//匹配ed2k連結 5 //string j = r.Match(i).ToString(); 6 MatchCollection j = r.Matches(i); 7 //j = j.Substring(0, j.Length - 1); 8 //去掉提取字串的換行,因為假如儲存的源碼中txt文本自動換行的話 9 if (r.IsMatch(i))10 {11 string str="",temp="";12 for (int c = 0; c < j.Count; c++)13 {14 temp=j[c].ToString();15 str += temp.Substring(0, temp.Length - 1)+"\n\n";16 }17 18 MessageBox.Show(str);19 //MessageBox.Show(r.Match(i).ToString());20 21 }22 else23 {24 MessageBox.Show("尚未提取出ed2k連結!");25 }26 }
效果:
案例3:提取cnblogs首頁的文章連結地址:
適合做個RSS閱讀,只保留文字.
主介面同上
1 private void btnGetCnblogs_Click(object sender, EventArgs e) 2 { 3 string i = txtemail.Text.Trim(); 4 Regex r = new Regex(@"[a-z]{4}[:]+//[w]{3}[^ ]+/[0-9]+.[html]{4}"); 5 MatchCollection j = r.Matches(i); 6 if (r.IsMatch(i)) 7 { 8 string str=""; 9 for (int c = 0; c < j.Count; c++)10 {11 if (c + 1 < j.Count)12 {13 if (j[c].ToString() != j[c + 1].ToString())14 //去掉相鄰兩個重複的連結,當相鄰兩個連結不相等時才將前一個存入str;15 //因為部落格園裡面同一篇文章會提取出相同的三個連結16 {17 //list.Add(j[c].ToString());18 str += j[c].ToString() + "\n\n";19 }20 }21 }22 str=str+j[j.Count - 1].ToString();23 24 MessageBox.Show(str);25 //MessageBox.Show(r.Match(i).ToString());26 27 }28 else29 {30 MessageBox.Show("尚未提取cnblogs文章連結!");31 }32 }
PS:提取漢字的Regex: [\u4e00-\u9fa5]