正则表达式的应用

来源:互联网 发布:淘宝网店开店的策划书 编辑:程序博客网 时间:2024/06/11 21:28
#从网站上读取部分信息
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);

原创粉丝点击