正则表达式:
命名空间 using System.Text.RegularExpressions;
正则表达式就是一个字符串
|优先级最低food|t 与foo(d|t)不一样
如何使用
1.是否匹配
2.字符串提取
3.替换
如何创建正则表达式
如何完成判断
例子:
string regex=@"^\d{7}$";
string phone="1234567";
//使用regex类下的IsMatch方法
if(Regex.IsMathch(phone,regex))
{
Console.WriteLine("您输入的是电话号码");
}
else
{
Console.WriteLine("您输入的不是电话号码");
}
邮箱验证的一个例子:
private void txtEmail_Leave(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(txtEmail.Text.Trim()))
{
return;
}
if (!Regex.IsMatch(txtEmail.Text.Trim(), @"^[0-9a-zA-Z\._-]+@[0-9a-zA-Z_-]+(\.[0-9a-zA-Z_-]+)+$"))
{
lbNote.ForeColor = Color.Red;
lbNote.Text = "邮箱输入错误";
}
else
{
lbNote.Text = "";
}
}
过滤敏感词例子:
public Form1()
{
InitializeComponent();
}
private void btnSender_Click(object sender, EventArgs e)
{
// 获得文本
string content = txtContent.Text.Trim();
if (string.IsNullOrEmpty(content))
{
return;
}
// 百家乐={MOD}
// 办理商业发票={BANNED}
// 定.{0,4}案片|百家乐
if(Regex.IsMatch(content, string.Join("|", listBan.ToArray())))
{
MessageBox.Show("含有非法词汇,禁止提交");
}
else if (Regex.IsMatch(content, string.Join("|", listMod.ToArray())))
{
MessageBox.Show("含有待审核词汇");
// 提交动作
}
else
{
MessageBox.Show("提交成功");
}
}
List<string> listMod = new List<string>();
List<string> listBan = new List<string>();
private void Form1_Load(object sender, EventArgs e)
{
// 处理敏感词
string[] words = File.ReadAllLines("网站过滤词(部分).txt", Encoding.Default);
// 遍历words分配两种敏感词
for (int i = 0; i < words.Length; i++)
{
string[] temp = words[i].Split(new char[] { '=' }, StringSplitOptions.RemoveEmptyEntries);
if (temp[1] == "{MOD}")
{
// 为每一个字符中间都加上“.{0,4}”
char[] chs = temp[0].ToCharArray();
StringBuilder sb = new StringBuilder();
for (int j = 0; j < chs.Length; j++)
{
sb.Append(chs[j] + ".{0,4}");
}
listMod.Add(sb.ToString());
}
else if (temp[1] == "{BANNED}")
{
char[] chs = temp[0].ToCharArray();
temp[0] = string.Join(".{0,4}", chs);
listBan.Add(temp[0]);
}
}
}
}
----------------------------------------------------------------------txt文件内容--------------------------------------------------------------------------
安定片={MOD}
罢餐={MOD}
罢工={MOD}
罢食={MOD}
百家乐={MOD}
百家乐={MOD}
办理商业发票={BANNED}
办理文凭={BANNED}
办理无抵押贷款={BANNED}
办理证件={MOD}
办证={MOD}
办证刻章发票={BANNED}
棒子={MOD}
冰毒={BANNED}
博彩={BANNED}
博翔团队={BANNED}
步枪={BANNED}
彩票机={BANNED}
彩票奖券网={BANNED}
厂家={MOD}
成人导航={BANNED}
成人电影={BANNED}
成人交友={BANNED}
成人论坛={BANNED}
成人片={BANNED}
成人频道={BANNED}
成人贴图={BANNED}
成人网={BANNED}
成人文学={BANNED}
成人午夜场={BANNED}
成人小说={BANNED}
出售={MOD}
出售假币={BANNED}
出售手枪={BANNED}
出售银行卡={BANNED}
传真群发={BANNED}
春药={BANNED}
网络推广={MOD}
网络营销={MOD}
网上办证={BANNED}
网上订机票={BANNED}
网赚={MOD}
卫星接收器={MOD}
未删节={BANNED}
文凭={MOD}
下半身={MOD}
----------------------------------------------------------------------txt文件内容--------------------------------------------------------------------------
字符串提取:
Match m=Regex.Match("需要处理的字符串",@"正则表达式");//当有多个匹配的时候,只返回第一个匹配的
MatchCollection ms =Regex.Matcher("需要处理的字符串",@"正则表达式");
for(int i=0;i<ms.Count;i++)
{
if (ms[i].Success)
{
Console.WriteLine("捕获到的字符串为:{0}", ms[i].Value);
Console.WriteLine("它的索引是:{0}", ms[i].Index);
Console.WriteLine("它的长度为:{0}", ms[i].Length);
}
else
{
Console.WriteLine("没有捕获到什么");
}
}
或者:
foreach (Match m in ms)
{
if (m.Success)
{
Console.WriteLine("捕获到的字符串为:{0}", m.Value);
Console.WriteLine("它的索引是:{0}", m.Index);
Console.WriteLine("它的长度为:{0}", m.Length);
}
else
{
Console.WriteLine("没有捕获到什么");
}
}
1.下载HTML代码
WebClient wc=new WebClient();
wc.Encoding=Ebcoding.UTF8;
WebClient.DownloadString("http://***.***.com")
例子:
class Program
{
static void Main(string[] args)
{
// 1、下载HTML代码
WebClient wc = new WebClient();
wc.Encoding = Encoding.UTF8;
string html = wc.DownloadString("http://***.***.com");
// 2、正则提取
string regex = @"([0-9a-zA-Z\._-]+)@([0-9a-zA-Z-_]+(\.[0-9a-zA-Z-_]+)+)";
MatchCollection ms = Regex.Matches(html, regex);
List<string> list = new List<string>();
foreach (Match m in ms)
{
if (m.Success)
{
list.Add(string.Format("邮箱: {0}, 用户名: {1}, 域名: {2}", m.Value, m.Groups[1].Value, m.Groups[2].Value));
}
}
// 3、显示出来
File.WriteAllLines("Email.txt", list.ToArray());
}
}
分组的例子:
class Program
{
static void Main(string[] args)
{
MatchCollection ms = Regex.Matches("age=30, name=张三, gender=男", @"(\w+)=(\w+)");
// 1、分组是对匹配到的一个字符串进行处理
// 2、分组的组序号从1开始,为0的组,就是value本身
// 3、分序号从左往右数(,第几次出现,就是第几组
foreach (Match m in ms)
{
if (m.Success)
{
Console.WriteLine(m.Value);
Console.WriteLine(m.Groups[1].Value);
Console.WriteLine(m.Groups[2].Value);
Console.WriteLine();
}
}
Console.ReadKey();
}
}
例子:
class Program
{
static void Main(string[] args)
{
string str = @"192.168.10.5[port=21,type=ftp]";
//string str = @"192.168.10.5[port=21]";
Match m1 = Regex.Match(str, @"\d{0,3}(\.\d{0,3}){3}");
if (m1.Success)
{
Console.Write("Ip为{0}", m1.Value);
}
Match m2 = Regex.Match(str, @"port=(\d+)");
if (m2.Success)
{
Console.Write(", 端口号为: {0}", m2.Groups[1].Value);
}
Match m3 = Regex.Match(str, @"type=(\w+)");
if (m3.Success)
{
Console.Write(", 提供的服务为:{0}", m3.Groups[1].Value);
}
string path = @"C:\1\2\3\4\5\6\7\8\9\0\天黑黑.mp3";
Match m = Regex.Match(path, @".+\\(.+)"); //贪婪模式
if (m.Success)
{
Console.WriteLine("文件名为: {0}", m.Groups[1].Value);
}
Console.ReadKey();
}
}
关于贪婪模式:
// 在正则表达式中,对于个数限定符(+,*,{n,},...)默认是尽可能的匹配,称为“贪婪模式”
// 如果需要取消贪婪模式,在限定符后加上一个?
例子:
string str = @"<a href=""http://www.baidu.com"">百度</a><br /><a href=""http://www.cctv.com"">CCTV</a>";
MatchCollection ms = Regex.Matches(str, "href=\"(.+?)\""); //(.+)括号里面如果没加?则只能匹配一条数据,因为匹配了最外围的两个引号
Console.WriteLine("匹配到了{0}条数据", ms.Count);
Console.WriteLine();
foreach (Match m in ms)
{
if (m.Success)
{
Console.WriteLine(m.Value);
Console.WriteLine(m.Groups[1].Value);
}
}
例子:
string str = @"1234567890";
string regex = @"(\d+)(\d+)(\d+)";
// 正则表达式多个贪婪模式存在的时候,从左往右轻度依次降低
// 如果是同类型贪婪模式在一起,左边最强,右边最弱,而且除了以第一个其余的轻度相同
Match m = Regex.Match(str, regex);
if (m.Success)
{
Console.WriteLine("第一组{0}\n", m.Groups[1].Value); //输出12345678
Console.WriteLine("第二组{0}\n", m.Groups[2].Value); //输出9
Console.WriteLine("第三组{0}\n", m.Groups[3].Value); //输出0
}
命名空间 using System.Text.RegularExpressions;
正则表达式就是一个字符串
|优先级最低food|t 与foo(d|t)不一样
如何使用
1.是否匹配
2.字符串提取
3.替换
如何创建正则表达式
如何完成判断
例子:
string regex=@"^\d{7}$";
string phone="1234567";
//使用regex类下的IsMatch方法
if(Regex.IsMathch(phone,regex))
{
Console.WriteLine("您输入的是电话号码");
}
else
{
Console.WriteLine("您输入的不是电话号码");
}
邮箱验证的一个例子:
private void txtEmail_Leave(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(txtEmail.Text.Trim()))
{
return;
}
if (!Regex.IsMatch(txtEmail.Text.Trim(), @"^[0-9a-zA-Z\._-]+@[0-9a-zA-Z_-]+(\.[0-9a-zA-Z_-]+)+$"))
{
lbNote.ForeColor = Color.Red;
lbNote.Text = "邮箱输入错误";
}
else
{
lbNote.Text = "";
}
}
过滤敏感词例子:
public Form1()
{
InitializeComponent();
}
private void btnSender_Click(object sender, EventArgs e)
{
// 获得文本
string content = txtContent.Text.Trim();
if (string.IsNullOrEmpty(content))
{
return;
}
// 百家乐={MOD}
// 办理商业发票={BANNED}
// 定.{0,4}案片|百家乐
if(Regex.IsMatch(content, string.Join("|", listBan.ToArray())))
{
MessageBox.Show("含有非法词汇,禁止提交");
}
else if (Regex.IsMatch(content, string.Join("|", listMod.ToArray())))
{
MessageBox.Show("含有待审核词汇");
// 提交动作
}
else
{
MessageBox.Show("提交成功");
}
}
List<string> listMod = new List<string>();
List<string> listBan = new List<string>();
private void Form1_Load(object sender, EventArgs e)
{
// 处理敏感词
string[] words = File.ReadAllLines("网站过滤词(部分).txt", Encoding.Default);
// 遍历words分配两种敏感词
for (int i = 0; i < words.Length; i++)
{
string[] temp = words[i].Split(new char[] { '=' }, StringSplitOptions.RemoveEmptyEntries);
if (temp[1] == "{MOD}")
{
// 为每一个字符中间都加上“.{0,4}”
char[] chs = temp[0].ToCharArray();
StringBuilder sb = new StringBuilder();
for (int j = 0; j < chs.Length; j++)
{
sb.Append(chs[j] + ".{0,4}");
}
listMod.Add(sb.ToString());
}
else if (temp[1] == "{BANNED}")
{
char[] chs = temp[0].ToCharArray();
temp[0] = string.Join(".{0,4}", chs);
listBan.Add(temp[0]);
}
}
}
}
----------------------------------------------------------------------txt文件内容--------------------------------------------------------------------------
安定片={MOD}
罢餐={MOD}
罢工={MOD}
罢食={MOD}
百家乐={MOD}
百家乐={MOD}
办理商业发票={BANNED}
办理文凭={BANNED}
办理无抵押贷款={BANNED}
办理证件={MOD}
办证={MOD}
办证刻章发票={BANNED}
棒子={MOD}
冰毒={BANNED}
博彩={BANNED}
博翔团队={BANNED}
步枪={BANNED}
彩票机={BANNED}
彩票奖券网={BANNED}
厂家={MOD}
成人导航={BANNED}
成人电影={BANNED}
成人交友={BANNED}
成人论坛={BANNED}
成人片={BANNED}
成人频道={BANNED}
成人贴图={BANNED}
成人网={BANNED}
成人文学={BANNED}
成人午夜场={BANNED}
成人小说={BANNED}
出售={MOD}
出售假币={BANNED}
出售手枪={BANNED}
出售银行卡={BANNED}
传真群发={BANNED}
春药={BANNED}
网络推广={MOD}
网络营销={MOD}
网上办证={BANNED}
网上订机票={BANNED}
网赚={MOD}
卫星接收器={MOD}
未删节={BANNED}
文凭={MOD}
下半身={MOD}
----------------------------------------------------------------------txt文件内容--------------------------------------------------------------------------
字符串提取:
Match m=Regex.Match("需要处理的字符串",@"正则表达式");//当有多个匹配的时候,只返回第一个匹配的
MatchCollection ms =Regex.Matcher("需要处理的字符串",@"正则表达式");
for(int i=0;i<ms.Count;i++)
{
if (ms[i].Success)
{
Console.WriteLine("捕获到的字符串为:{0}", ms[i].Value);
Console.WriteLine("它的索引是:{0}", ms[i].Index);
Console.WriteLine("它的长度为:{0}", ms[i].Length);
}
else
{
Console.WriteLine("没有捕获到什么");
}
}
或者:
foreach (Match m in ms)
{
if (m.Success)
{
Console.WriteLine("捕获到的字符串为:{0}", m.Value);
Console.WriteLine("它的索引是:{0}", m.Index);
Console.WriteLine("它的长度为:{0}", m.Length);
}
else
{
Console.WriteLine("没有捕获到什么");
}
}
1.下载HTML代码
WebClient wc=new WebClient();
wc.Encoding=Ebcoding.UTF8;
WebClient.DownloadString("http://***.***.com")
例子:
class Program
{
static void Main(string[] args)
{
// 1、下载HTML代码
WebClient wc = new WebClient();
wc.Encoding = Encoding.UTF8;
string html = wc.DownloadString("http://***.***.com");
// 2、正则提取
string regex = @"([0-9a-zA-Z\._-]+)@([0-9a-zA-Z-_]+(\.[0-9a-zA-Z-_]+)+)";
MatchCollection ms = Regex.Matches(html, regex);
List<string> list = new List<string>();
foreach (Match m in ms)
{
if (m.Success)
{
list.Add(string.Format("邮箱: {0}, 用户名: {1}, 域名: {2}", m.Value, m.Groups[1].Value, m.Groups[2].Value));
}
}
// 3、显示出来
File.WriteAllLines("Email.txt", list.ToArray());
}
}
分组的例子:
class Program
{
static void Main(string[] args)
{
MatchCollection ms = Regex.Matches("age=30, name=张三, gender=男", @"(\w+)=(\w+)");
// 1、分组是对匹配到的一个字符串进行处理
// 2、分组的组序号从1开始,为0的组,就是value本身
// 3、分序号从左往右数(,第几次出现,就是第几组
foreach (Match m in ms)
{
if (m.Success)
{
Console.WriteLine(m.Value);
Console.WriteLine(m.Groups[1].Value);
Console.WriteLine(m.Groups[2].Value);
Console.WriteLine();
}
}
Console.ReadKey();
}
}
例子:
class Program
{
static void Main(string[] args)
{
string str = @"192.168.10.5[port=21,type=ftp]";
//string str = @"192.168.10.5[port=21]";
Match m1 = Regex.Match(str, @"\d{0,3}(\.\d{0,3}){3}");
if (m1.Success)
{
Console.Write("Ip为{0}", m1.Value);
}
Match m2 = Regex.Match(str, @"port=(\d+)");
if (m2.Success)
{
Console.Write(", 端口号为: {0}", m2.Groups[1].Value);
}
Match m3 = Regex.Match(str, @"type=(\w+)");
if (m3.Success)
{
Console.Write(", 提供的服务为:{0}", m3.Groups[1].Value);
}
string path = @"C:\1\2\3\4\5\6\7\8\9\0\天黑黑.mp3";
Match m = Regex.Match(path, @".+\\(.+)"); //贪婪模式
if (m.Success)
{
Console.WriteLine("文件名为: {0}", m.Groups[1].Value);
}
Console.ReadKey();
}
}
关于贪婪模式:
// 在正则表达式中,对于个数限定符(+,*,{n,},...)默认是尽可能的匹配,称为“贪婪模式”
// 如果需要取消贪婪模式,在限定符后加上一个?
例子:
string str = @"<a href=""http://www.baidu.com"">百度</a><br /><a href=""http://www.cctv.com"">CCTV</a>";
MatchCollection ms = Regex.Matches(str, "href=\"(.+?)\""); //(.+)括号里面如果没加?则只能匹配一条数据,因为匹配了最外围的两个引号
Console.WriteLine("匹配到了{0}条数据", ms.Count);
Console.WriteLine();
foreach (Match m in ms)
{
if (m.Success)
{
Console.WriteLine(m.Value);
Console.WriteLine(m.Groups[1].Value);
}
}
例子:
string str = @"1234567890";
string regex = @"(\d+)(\d+)(\d+)";
// 正则表达式多个贪婪模式存在的时候,从左往右轻度依次降低
// 如果是同类型贪婪模式在一起,左边最强,右边最弱,而且除了以第一个其余的轻度相同
Match m = Regex.Match(str, regex);
if (m.Success)
{
Console.WriteLine("第一组{0}\n", m.Groups[1].Value); //输出12345678
Console.WriteLine("第二组{0}\n", m.Groups[2].Value); //输出9
Console.WriteLine("第三组{0}\n", m.Groups[3].Value); //输出0
}