c#学习笔记——5

正则表达式:
命名空间 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
            }





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值