正则表达式
Regulator.exe
元字符
. 匹配任意单个字符
* 匹配前面内容出现0或多次
+ 一或多次
?
0或一次
[] 匹配[]中的字符出现一次[0-9] [a-z]
() 改变正则优先级 (zo)+
zo出现1或多次
| 或 z|food 匹配z或food (z|f)ood 匹配
zood或food
{n} 出现n次
{n,} 至少出现n次,最多不限
{n,m} 至少出现n次,最多出现m次
^
以谁开头 取反
$ 以谁结尾
\d 代表一个数字 等同于[0-9]
\D 代表非数字
等同于[^0-9]
\s 代表换行符 Tab 制表符等空白字符
\w 匹配字母或数字或下划线或汉子 即能组成单词的字符
\W
非\w 等同于[^\w]
?<month> 分组 给组起名字
using System;
using System.Collections.Generic;
using
System.Linq;
using System.Web;
using System.Web.UI;
using
System.Web.UI.WebControls;
using System.Text.RegularExpressions;
using
System.Net;
namespace Comp.WEB.正则
{
public partial class
WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object
sender, EventArgs e)
{
//Regex
的一个 静态方法
//1 Response.Write(Regex.IsMatch("55555",@"^\d{5}$")) ;
true
//2字符串提取 Match 即是静态 又是 实例方法
匹配数组
//Regex regex = new
Regex(@"\d+");
//Match
math=regex.Match("age=30");
//if
(math.Success)
//{
// Response.Write(math.Value); //30
//}
//3
分组
//Regex.Match("age=30", @"[a-z]",
RegexOptions.IgnoreCase);//忽略大小写
//Match math = Regex.Match("age=30", @"([a-zA-Z]+)=(\d+)");
//()分组的意思
//if
(math.Success)
//{
// Response.Write(math.Groups[0]); //返回的是整个整个正则表达式的结果
age=30
// Response.Write(math.Groups[1]);
//age
//
Response.Write(math.Groups[2]); //30
//}
// 4 匹配路径
c:/a/b.txt
实际可以用Path.GetFileName更好
//Match
match= Regex.Match("c:/a/b.txt",
@"^.+/(.+)$");
//if
(match.Success)
//{
//
Response.Write(match.Groups[1].Value);
//b.txt
//}
//5 匹配 年月日 June
26,1951
//string r=@"([a-zA-Z]+)\s+(\d{1,2}),\s*(\d{4})";
//Match match= Regex.Match(" June 26,1951",
r);
//if
(match.Success)
//{
//
//Response.Write(match.Groups[0].Value);
// Response.Write(match.Groups[1].Value);
//June
//
Response.Write(match.Groups[2].Value);
//26
//
Response.Write(match.Groups[3].Value);
//1951
//}
//给分组七5.1
//
?<>分组
//string r=@"(?<month>[a-zA-Z]+)\s+(?<date>\d{1,2}),\s*(?<year>\d{4})";
//Match match= Regex.Match(" June 26,1951",
r);
//if(match.Success)
//{
////输出值的时候可以有二种方式输出
//
Response.Write(match.Groups[1].Value);
//
Response.Write(match.Groups["date"].Value);
//}
//截取ip地址
//192.168.10.5[port=21,type=ftp]
//string str =
"192.168.10.5[port=21]";
//string ip =
"";
//string port =
"";
//string type =
"http";
//string reg =
@"(?<ip>[12]?\d?\d\.[12]?\d?\d\.[12]?\d?\d.[12]?\d?\d)\[port=(?<port>\d{1,5})(,type=(?<type>[a-zA-Z]+))?\]";
//Match match = Regex.Match(str,
reg);
//if
(match.Success)
//{
// ip =
match.Groups["ip"].Value;
// port =
match.Groups["port"].Value;
// if
(!string.IsNullOrEmpty(match.Groups["type"].Value))
//
{
// type =
match.Groups["type"].Value;
//
}
//}
//贪婪
.+ .*
//string
str =
"大家好。我是S.H.E。我22。我是H。我很好。呜呜。fffff";
//str gex = @"我是(.+)。";//匹配句话 但是 他会一直多的往后匹配 匹配到
呜呜。
//str
gex2=@"我是(.+?)。" //非贪婪模式
// _提取多个值
1
//string str = "大家好,我是Hebe,我22岁了,身高180,我们团队有3个女女!";
//MatchCollection matches =
Regex.Matches(str,@"\d+");
//foreach (Match match in
matches)
//{
// if
(match.Success)
//
{
//
Console.WriteLine(match.Value);
//
}
//}
//提起多个值2
// string str = "大家好。我们是S.H.E。我是S。我是H。我是E。呜呜。fffff";
// MatchCollection
matches = Regex.Matches(str,
@"我是(.+?)");
//
foreach (Match match in matches)
// {
// if
(match.Success)
//
{
//
Console.WriteLine(match.Groups[1].Value);
//
}
// }
//
Console.Read();
//}
// -------------------------------------- //从网站获取邮箱
//从一个页面提取所有Email地址,用WebClient,自己动手写Email群发器
//WebClient wc = new
WebClient();
// string content = wc.DownloadString("http://192.168.1.100/email.htm");
//
string reg =
@">(?<mail>\w+([-+.‘]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)</a>";
//MatchCollection matches = Regex.Matches(content,
reg);
//foreach (Match match in
matches)
//{
// if
(match.Success)
//
{
//
Console.WriteLine(match.Groups["mail"].Value);
//
}
//}
//--------------------------------
//练习:从网从一个站抓取所有的图片地址,下载到硬盘
//
WebClient wc = new
WebClient();
// string content = wc.DownloadString("http://192.168.1.100/photos.htm");
// string reg =
@"style=""FLOAT:\snone""\stitle=.{8}\sborder=0\s+src=""(?<url>.+?)"">";
//MatchCollection mc = Regex.Matches(content,
reg);
//foreach (Match match in
mc)
//{
// //Console.WriteLine(match.Groups["url"].Value);
// string url = "http://192.168.1.100/" + match.Groups["url"].Value;
// Console.WriteLine(Path.GetFileName(url));
//下载
//}
////练习:抓取所有超链接,特征:href="地址“
//WebClient wc = new
WebClient();
//string content = wc.DownloadString("http://192.168.1.100/photos.htm");
// string reg = @"http(s)?://([\w-]+\.)+[\w-]+(/[\w-
./?%&=]*)?";
//MatchCollection mc = Regex.Matches(content, reg);
//foreach
(Match match in
mc)
//{
// if
(match.Success)
//
{
//
Console.WriteLine(match.Value);
//
}
//}
//==============第二种
//string reg =
@"align=middle><A\s+href=""(http(s)?://([\w-]+\.)+[\w-]+(/[\w-
./?%&=]*)?)""><IMG";
//MatchCollection mc =
Regex.Matches(content,reg);
//foreach (Match match in
mc)
//{
// if
(match.Success)
//
{
//
Console.WriteLine(match.Groups[1].Value);
//
}
//}
//练习:抓取新闻
采集工具
//WebClient wc = new
WebClient();
//string reg =
@"<div\s+class=""qiushi_body\s+article\s*""\s+id=""\w+""\s+title="".+?"">(.+?)<p\s+style=""float";
//using (Stream stream = wc.OpenRead("http://192.168.1.100/qb.htm"))
//{
// using (StreamReader sr = new StreamReader(stream,
Encoding.UTF8))
//
{
// string content =
sr.ReadToEnd();
//
//单行模式匹配
// //让.可以匹配到\n
// MatchCollection mc =
Regex.Matches(content, reg,
RegexOptions.Singleline);
// foreach (Match match in
mc)
//
{
// if
(match.Success)
//
{
//
string str =
match.Groups[1].Value;
//
//把html标签删除
//
str = Regex.Replace(str, "<.+?>",
"");
//
str = str.Replace(" ", "").Replace("(来自qiushibaike.com)",
"");
//
Console.WriteLine(str);
//
Console.WriteLine("==============");
//
}
//
}
//
}
//}
//正则替换
//
1Regex.Replace
//string str =
"234-----233---34-3434";
//str = Regex.Replace(str,@"\-+","-"); //多个-
//一个-
//Console.WriteLine(str)
//234-233-3434
//2---------------
好多空格替换成一个空格
//string str = "234 233 34
3434";
//str = Regex.Replace(str,@" +","
");
//Console.WriteLine(str);
//3 将中文的双引号替换为英文双引号
// string str =
"string s1 = \"red\";string s2 =
\"blue\"";
//
str = Regex.Replace(str, " “(.+?)”",
"\"$1\"");
//找到双引号里面的内容用一个组 包起来 不想他被替换 只是替换
外面的双引号
//$1
匹配组里的内容
//Console.WriteLine(str);
//3
将英文文的双引号替换为中文双引号
// string
str = "string s1 = \"red\";string s2 =
\"blue\"";
// str = Regex.Replace(str, " \"(.+?)\"",
"“$1”");
////
找到双引号里面的内容用一个组 包起来 不想他被替换 只是替换
外面的双引号
// //$1
匹配组里的内容
//
Console.WriteLine(str);
//4字符串前后替换
//string str =
"age=30";
//str = Regex.Replace(str, @"(\w+)=(\d+)",
"$2=$1");
//Console.WriteLine(str);
//5替换字符串格式
日期格式
//string str = "我的生日是05/21/2010耶,他的生日05/21/2010,05/21/2010";
//str
= Regex.Replace(str, @"(\d{2})/(\d{2})/(\d{4})",
"$3-$1-$2");
//$3
第三组的内容
//Console.WriteLine(str);
//6 给一段
连接自动加上超链接
//string str = "http://www.itcast.cn,,,,,,http://g.cn......http://www.qiushibaike.com";
//str = Regex.Replace(str, @"(http(s)?://([\w-]+\.)+[\w-]+(/[\w-
./?%&=]*)?)", "<a
href=‘$1‘>$1</a>");
//Console.WriteLine(str);
//Console.Read();
// ubb
转义
//string str =
"你好,[i]我发[/i]现一个[b]新网站[/b],[b]大家[/b]来看呀[url=http://www.qq.com]秋秋[/url],另外一个有时间也可以看看[url=http://www.rupeng.com]如鹏[/url],还有[url=http://www.itcast.cn]传智播客[/url]";
//str =
Regex.Replace(str, @"\[[iI]\](.+?)\[/[iI]\]",
"<i>$1</i>");
// 可以大写 小写
//str = Regex.Replace(str, @"\[[bB]\](.+?)\[/[bB]\]",
"<b>$1</b>");
//str = Regex.Replace(str, @"\[(url|URL)=(.+?)\](.+?)\[/(url|URL)\]", "<a
href=‘$2‘>$3</a>");
//Console.WriteLine(str);
//Console.Rea
}
}
}
原文:http://www.cnblogs.com/cdaq/p/3570383.html