正則表達式的應用

#從網站上讀取部分信息
1.讀取需要採集的網站
string url = http://www.guangdongliming.eb80.com/contant/";


2.從網站上下載源代碼
WebClient MyWebClient = new WebClient();
MyWebClient.Credentials = CredentialCache.DefaultCredentials;//獲取或設置用於向Internet資源的請求進行身份驗證的網絡憑據
Byte[] pageData = MyWebClient.DownloadData(url); //從指定網站下載數據
string pageHtml = Encoding.UTF8.GetString(pageData);  //如果獲取網站頁面採用的是GB2312,則使用這句 


3.篩選出需要的信息
Regex reg = new Regex(@"(?<=<ul class=""wrap form"">)(.|\n)*?</ul>");//(?<=<ul class=""wrap form"">)((.|\n)*?)(?=</ul>) 用正則表達式讀取ul之間的數據
string link = reg.Match(pageHtml).Value.ToString();//正則表達式的結果



Q:經常看見的正則前面的 (?i) (?s) (?m) (?is) (?im) 是什麼意思?
A: 稱爲內聯匹配模式,通常用內聯匹配模式代替使用枚舉值RegexOptions指定的全局匹配模式,寫起來更簡潔。
  (?i) 表示所在位置右側的表達式開啓忽略大小寫模式
  (?s) 表示所在位置右側的表達式開啓單行模式。
  更改句點字符 (.) 的含義,以使它與每個字符(而不是除 \n 之外的所有字符)匹配。
  注意:(?s)通常在匹配有換行的文本時使用
  (?m) 表示所在位置右側的表示式開啓指定多行模式。
  更改 ^ 和 $ 的含義,以使它們分別與任何行的開頭和結尾匹配,
  而不只是與整個字符串的開頭和結尾匹配。
  注意:(?m)只有在正則表達式中涉及到多行的“^”和“$”的匹配時,才使用Multiline模式。
  上面的匹配模式可以組合使用,比如(?is),(?im)。

  另外,還可以用(?i:exp)或者(?i)exp(?-i)來指定匹配的有效範圍。



#變量放到數據庫中
http://www.youboy.com/spur?kw={0}&p={1}
前臺讀取: string url = string.Format(Dt1.Rows[i]["字段名"].ToString().Trim(), 關鍵詞);



#放在數據庫中的正則:
(?is)(?<=<DIV\s+class="main_content">)(?><div[^>]*>(?<o>)|</div>(?<-o>)|(?:(?!</?div\b).)*)*(?(o)(?!))</div>


網頁中的正則(用於讀取類名爲“main_content”的div包括的所有內容):
(?is)(?<=<DIV\s+class=""main_content"">)(?><div[^>]*>(?<o>)|</div>(?<-o>)|(?:(?!</?div\b).)*)*(?(o)(?!))</div>



#讀取span之間的內容

string Htmlstring = "小梵蒂岡梵蒂岡<span class='bb'>aaaaaaaaaaa</span>的風格的股份";//需要讀取的字符串
Htmlstring = Regex.Replace(Htmlstring, @"<span\s*[^>]*>(?<str>.*?)</span>", "${str}", RegexOptions.IgnoreCase);//讀取的正則

//Htmlstring = Regex.Replace("<img>abc</img>",@"<img>(?<str>.*?)</img>","[圖片]${str}");
MessageBox.Show(Htmlstring);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章