zoukankan      html  css  js  c++  java
  • 黑马程序员_正则表达式学习笔记(1)

    正则表达式学习笔记(1)

    详细请看这位大神的《正则表达式30分钟入门教程

    (学习正则表达式之前必须有个好的工具,我使用的是Regulator.exe)

    一、学习正则的时候不必都记住某个元字符具体的意思,但是必须知道都有那些功能,方便以后使用到的时候能及时解决问题。

    二、学习后必须知道的知识点 (先学会使用这些基本就够用了,其他的在开发中再去看就是了)
    1、元字符(常用的)
    序号 元字符           作用 实例
    1 .点 匹配任意单个字符  
    2 []中括号 匹配其中单个字符 例[123]或[1-3] 表示匹配1或2或3
    3 ()小括号 改变优先集,()中的也表示一个组  
    4 |竖线 g|food 匹配g 或 food   ;(g|f)ood 表示匹配good 或 food
    5 *星号 0次或多次  
    6 + 1次或多次  
    7 ? 0次或1次  
    8 {} {n}表示确定n次;{n,}表示最少出现n次;{n,x}表示最少出现n次且最多出现x次  
    9 ^ ^表示以什么开始  ^123asd 表示以123asd开头;^(123)asd 表示以123开头
    10 $  $表示以什么结束  
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
    2、简写表达式(常用的) 
    序号 表达式 作用 实例
    1 \d 匹配一个数字 等同于[0-9]
      \D 匹配非数字 等同于[^0-9]
    2 \s 匹配换行符、Tab制表符、空格等空白字符  
      \S 匹配非空白字符  
    3 \w 匹配“字母”、“数字”、“下划线”、“汉字”  
      \W 非\w  
    4 [\u4e00-\u9fff] 匹配所有汉字  
     
     
     
     
     
     
     
     
     
    3、匹配组
      ()小括号中的可以看做是一个组,在提取的时候整个匹配项是X[0],第一个小括号是X[1],依次类推
     
    4、贪婪模式和非贪婪模式
        +、*的匹配默认是贪婪的:尽可能多的匹配,直到“再贪婪一点儿”其后的匹配模式就没法匹配为止。
        在+、*后添加?就变成非贪婪模式(? 的另外一个用途):让其后的匹配模式尽早的匹配。
        实例:字符串:“孔子说:三人行,必有我妻。择其靓者而娶之。” 
        贪婪模式:"孔子.+。"                            匹配结果:“孔子说:三人行,必有我妻。择其靓者而娶之。” 
        非贪婪模式:"孔子.+?。"                         匹配结果:“孔子说:三人行,必有我妻。” 
     
    三、C#中如何操作正则

      

     

        Regex.IsMatch 字符串匹配

     

        Regex.Match 字符串提取

     

      Regex.Matches 提取多个匹配结果

     
        Regex.Replace 正则替换 分组替换

        Match 单行模式 Single line 让正则表达式的.能匹配到\n

     

        MatchCollection 
     
    四、实例
    1、判断日期格式是否合法(2013-5-27、2013-05-27、2013-05-5、2013-5-5都合法)
        正则表达式:^\d{4}\-(0?[1-9]|1[012])\-(0?[1-9]|[12][0-9]|3[01])$ 
    1 static void Main(string[] args)
    2 {
    3   string str=@"\d{4}\-(0?[1-9]|1[012])\-(0?[1-9]|[12][0-9]|3[01])";//正则表达式(不能匹配润年平年哈)
    4   Console.WriteLine(Regex.IsMatch("传说中这一天,也就是2012-2-31是世界末日。", str));//打印判断结果
    5   Console.WriteLine(Regex.Match("传说中这一天,也就是2012-2-31是世界末日。", str)); //把匹配的结果打印出来           
    6   Console.ReadKey();
    7 }

    2、从网上抓取指定网页内的所有email地址

     1 static void Main(string[] args)
     2          {
     3              //邮箱的正则表达式
     4              //不知道邮箱能不能以汉字开头,所以没有排除汉字开头
     5              //这里定义了邮箱只能以a-z结束
     6  
     7              string reg = @"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*[a-z]";
     8              //实例化一个WebClient wc来下载URL上的字符串
     9              WebClient wc = new WebClient();
    10              string str = wc.DownloadString("http://bbs.tianya.cn/post-936-94688-1.shtml");
    11              //Match集合MatchCollection 来接收Regex.Matches(str, reg)分析出来的信息。
    12              MatchCollection mcs = Regex.Matches(str, reg);
    13              //遍历 mcs,打印他的每一个值
    14              foreach (Match item in mcs)
    15              {
    16                  if (item.Success)
    17                  {
    18                      //如果值里面还有分组请使用item.Groups[n]来取值
    19                      Console.WriteLine(item.Value);
    20                  }
    21              }
    22              Console.Read();
    23  
    24          }
  • 相关阅读:
    Django-下载文件设置响应头和兼容中文
    django-strftime日期格式化问题
    API集成管理平台YAPI的搭建和使用
    dubbo 的 spi 思想是什么?
    关于
    Python接口自动化之unittest单元测试
    Python接口自动化之requests请求封装
    Python接口自动化之Token详解及应用
    Python接口自动化之cookie、session应用
    Python接口自动化-requests模块之post请求
  • 原文地址:https://www.cnblogs.com/xiangsoft/p/3120274.html
Copyright © 2011-2022 走看看