• 正则表达式总结


    正则表达式
    元字符
      --1   .      除\n任意的单个字符
      --2   []     []内任意单个字符
      --3   |      或(两边任意一个)
      --4   ()     改变优先级、提取组
      --5   *      限定前面的表达式可以出现0-多次(可有可无)
      --6   +      限定前面的表达式至少出现1次。
      --7   ?      限定前面的表达式出现0次或1次
      --8   {n}    限定前面的表达式,必须只能出现n次
             {n,m}  至少出现n次,最多出现m次
             {n,}   至少n次
     
      --9   ^       在[]内表示  非
                     在字符串的开始,表示匹配一行的开始
      --10  $       匹配一行的结尾
      --11  ^abc$   表示完全匹配,只能是abc

    ----------------------------------------
             \d      代表一个数字
             \D      表示\d的反面,非数字
            
             \s       空白符
             \S       非空白符
            
             \w       匹配字母或数字或下划线或汉字,即能组成单词的字符,除%&#@!$等字符。[a-zA-Z0-9_汉字]
             \W      非
     
      注意:d:digital;s:space、w:word。大写就是“非”
     
    -----------------------------------
      例:
      1. ^z|food$   表示以z开头的任意字符串 或 以food结尾的任意字符串
      2. z|food     表示 z 或 food (不表示zood),但是,由于该正则表达式没有写^和$,
                     所以在整个字符串中,只要有任意一个位置出现z或food都可以
      3. ^(z|f)ood$  表示zood 或 food
      ----------------------------------------------------
     
      在.net中使用正则表达式用Regex类. 如果要用到上面的元字符,就需要将元字符转义 '\'.
     
      Regex.IsMatch();  //判断一个字符串是否匹配    
            例如:Regex.IsMatch("bbbbg","^b.*g$");  Regex.IsMatch(“email12@mail.com”, @“^\w+@\w+\.\w+$”);可以使用汉字的。
      Regex.Match();    //从某个字符串中提取匹配正则表达式的某个子字符串,(只能匹配一个)
      Regex.Matches();  //字符串提取,可以提取所有匹配的字符串 (匹配多个)
      Regex.Replace();  //字符串替换,把所有匹配正则表达式的字符串替换为对应的字符串  email = Regex.Replace(email, @"(\w)(\w)+(@\w+\.\w+)", "$1*****$3");
     
      ---------------------------------------------------------

    --字符串提取: 
    Match match = Regex.Match("age=30", @"^(.+)=(.+)$");
    if (match.Success)
    {
        Console.WriteLine(match.Groups[1] .Value);
        Console.WriteLine(match.Groups[2] .Value);
    注意Groups的序号是从1开始的,0有特殊含义

    在做字符串提取的时候【一般】都不加^和$,因为字符串提取,是在原来的字符串中只要找到一部分匹配就可以提取了。字符串中有几个(),就有几个分组。
    例如:从文本提取出名字
    Match match = Regex.Match("大家好。我是baby。我22岁了。", "我是(.+)。");//错,是贪婪模式,匹配出的结果是“baby。我22岁了”
    Match match = Regex.Match("大家好。我是baby。我22岁了。", "我是(.+?)。");//正确
    因为+、*的匹配默认是贪婪模式(尽可能多的匹配),故需要在+、*后添加?就变成非贪婪模式(? 的另外一个用途)。
     
    Match获得的是匹配的第一个。Regex.Matches方法可以获得所有的匹配项。
    例如:
    从一段文本中提取所有的数字
    MatchCollection matches = Regex.Matches("大家好,我是Heb,我22岁了,身高180,我们团队有3个女女!", @"\d+");
    for (int i = 0; i < matches.Count; i++)
    {
           Console.WriteLine(matches[i].Groups[1].Value);
    }
     
    抓取所有超链接,特征:href="地址
    MatchCollection matches = Regex.Matches(content,"<a\s*href='(.+?)'\s*");

      -----------------------------------------------
      贪婪模式:
      --当正则表达式提取的时候,如果1个字符也能匹配,多个字符也能匹配,
        这时会按照使用最多字符的放松来匹配。
       
      --?是用来终止贪婪模式的(在限定符后面使用),当终止贪婪模式后会按照最小的方式来匹配。
      --默认正则表达式采用贪婪模式,尽可能多的匹配。
  • 相关阅读:
    PHP部署调优-自动部署工具
    set容器与map容器的简单应用
    POJ2431 优先队列+贪心
    离散数学交并补运算、差运算、异或运算的实现--biaobiao88
    构造命题公式的真值表--biaobiao88
    队列的简单使用
    二叉树的查找(前序、中序、后序、层序遍历)--biaobiao88
    A
    取整
    JavaScript对象
  • 原文地址:https://www.cnblogs.com/chay1227/p/2973122.html
Copyright © 2020-2023  润新知