• 黑马程序员_正则表达式用法与练习


    一个正则表达式就是由普通字符以及特殊字符(称为元字符)组成的字符串。

    一、元字符1

    .    匹配除 之外的任何单个字符。b.g能匹配big,bug,b g,不能匹配buug。

    []    匹配括号中的任何一个字符。b[aui]g能匹配bug,big,bag,不能匹配beg,baug。可以在括号中使用连字符“-”来指定字符的区间来简化表示。

        [0-9]=[0123456789]

        [a-z]=[abcdefg...xyz]

        [A-Z]=[ABCDEFG...XYZ]

        [0-9a-zA-Z]=任何大小字母和数字

    |    将两个匹配条件进行逻辑“或”运算。'z|food'能匹配'z'或'food','(z|f)ood'能匹配'zood'或'food'

    ()    将()之间括起来的表达式定义为"组"(group),并且将匹配这个表达式的字符保存到一个临时区域,这个元字符在字符串提取的时候非常有用。把一些字符表示为一个整体。改变优先级,定义提取组两个作用。

    二、元字符2 限定符:限定前面的正则表达式出现的次数。

    *    匹配零至多次在它之前的子表达式,和通配符*没有关系。'zo*'(等同于z(o)*)能匹配'z,zo,zoo'因此'.*'意味着能够匹配任意字符串'z(b|c)*'能匹配'zb,zbc,zcb,zccc,zbbbccc''z(ab)*'能匹配'z,zab,zabab'(用括号改变优先级)。

    +    匹配前面的子表达式一次或多次,和*对比(0到多次)。9+能匹配9,99,999等。'zo+'能匹配'zo,zoo',不能匹配'z'。

    ?    匹配前面的子表达式零次或一次,'do(es)'能匹配'do,does',一般用来匹配“可选部分”。(终止贪婪模式)

    {n}  匹配确定的n次。'zo{2}'能匹配zoo。'e{2}'不能匹配'bed'中的'e',但是能匹配'seed'中的两个'e'。'seeeed'不可以。

    {n,}  至少匹配n次。'e{2,}'不能匹配'bed'中的'e',但能匹配'seeeeeeeeed'中的所有'e'。

    {n,m}  最少匹配n次且最多匹配m次。'e{1,3}'将匹配'seeeeeeeeed'中的前三个'e'。

    三、元字符3 整行匹配

    ^    匹配行开始符。'^regex'能匹配'regex我会用',但不能匹配'我会用regex'。

    ^    另外一种意思,非!([^0-9])

    $    匹配行结束符。'浮云$'能匹配'一切都是浮云'的末尾,不能匹配'浮云呀'

    四、简写表达式

    d    [0-9],代表一个数字

    D    [^0-9],代表非数字

    s    代表换行符、Tab制表符等空白字符,(空格、回车、制表符)

    S    代表非空白字符(a0%$@@)

    w    匹配字母或数字或下划线或汉字,即能组成单词的字符;除%&#@!$等字符。

    W    非w,等同于[^w]

    d:digital;s:space;w:word 大写就是"非" 

    提取组输出结果:

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Text.RegularExpressions;
     6 
     7 namespace 匹配字符串
     8 {
     9     class Program
    10     {
    11         static void Main(string[] args)
    12         {
    13             string str1 = "4972988@qq.com";
    14             string str2 = "dlwcg@qq.com.cn";
    15             string str3 = "12345678901234567x";
    16             string str4 = "123456789012345";
    17             string regex1 = @"^w+@w+(.w+)+$";                       //匹配E-mail
    18             string regex2 = @"^(d{15}|d{17}[dxX])$";                 //匹配ID
    19             Console.WriteLine(Regex.IsMatch(str1, regex1).ToString());  //这里的Regex.IsMatch方法只返回一个bool结果
    20             Console.WriteLine(Regex.IsMatch(str2, regex1).ToString());
    21             Console.WriteLine(Regex.IsMatch(str3, regex2).ToString());
    22             Console.WriteLine(Regex.IsMatch(str4, regex2).ToString());
    23             Console.ReadKey(true);            
    24         }
    25         //输出结果
    26         //True
    27         //True
    28         //True
    29         //True
    30     }
    31 }
    匹配字符串
     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Text.RegularExpressions;
     6 
     7 namespace 提取字符串
     8 {
     9     class Program
    10     {
    11         static void Main(string[] args)
    12         {
    13             string res;
    14             string str = "我一定要进入2014年4月15日的第13期黑马训练营.net班。";
    15             //Match只返回匹配的第一个匹配项
    16             Match m = Regex.Match(str, @"d+");
    17             if (m.Success)
    18             {
    19                 res = m.Value;
    20             }
    21             else
    22             {
    23                 res = "没有匹配到";
    24             }
    25             Console.WriteLine(res);
    26             Console.ReadKey(true);
    27             //输出结果:
    28             //2014
    29         }
    30     }
    31 }
    提取字符串
     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Text.RegularExpressions;
     6 
     7 namespace 提取多个字符串
     8 {
     9     class Program
    10     {
    11         static void Main(string[] args)
    12         {
    13             string str = "我一定要进入2014年4月15日的第13期黑马训练营.net班。";
    14             MatchCollection mc = Regex.Matches(str, @"d+");
    15             foreach (Match temp in mc)
    16             {
    17                 //在这里,mc为一个集合,temp为每一条匹配的结果,temp.Groups为每条匹配结果中的每一组结果
    18                 //因为只匹配了纯数字,
    19                 //所以在这里temp.Value与temp.Groups[0].Value的结果一样。
    20                 Console.WriteLine(temp.Groups[0].Value);
    21             }
    22             Console.ReadKey(true);
    23             //输出结果
    24             //2014
    25             //4
    26             //15
    27             //13
    28         }
    29     }
    30 }
    提取多个字符串
     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Net;
     6 using System.Text.RegularExpressions;
     7 
     8 namespace 提取组
     9 {
    10     class Program
    11     {
    12         //提取黑马.net13期论坛帖子标题http://bbs.itheima.com/forum-174-1.html
    13         //<a href="thread-107723-1-1.html" onclick="atarget(this)" class="s xst" target="_blank">关于ASP.Net+Unity3D十三期招生安排,报.Net必读!!!</a>
    14         //<a href="thread-d+-1-1.html" onclick="atarget(this)" class="s xst">([^<]+)</a>
    15 
    16         static void Main(string[] args)
    17         {
    18             WebClient wc = new WebClient();
    19             wc.Encoding = Encoding.UTF8;
    20             string str = wc.DownloadString(@"http://bbs.itheima.com/forum-174-1.html");
    21             string regex = @"<a href=""thread-d+-1-1.html"" onclick=""atarget(this)"" class=""s xst"">([^<]+)</a>";
    22             MatchCollection mc = Regex.Matches(str, regex);
    23             foreach (Match temp in mc)
    24             {
    25                 //这里,mc为匹配的集合,temp为匹配的每一条结果,temp.Groups用()把每条结果分组了,
    26                 //Group[索引]这里的索引为组的序号,整体为0组,表达式里只有一个(),所以结果为Groups[0]
    27                 Console.WriteLine(temp.Groups[1].Value);
    28             }
    29             Console.ReadKey(true);
    30         }
    31     }
    32 }
    提取组(提取黑马.net13期论坛帖子标题)
     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Text.RegularExpressions;
     6 
     7 namespace 字符串替换
     8 {
     9     class Program
    10     {
    11         static void Main(string[] args)
    12         {
    13             string str = @"2014-03-20";
    14             str = Regex.Replace(str, @"(d+)-(d+)-(d+)", "$1年$2月$3日");
    15             Console.WriteLine(str);
    16             Console.ReadKey(true);
    17             //输出结果
    18             //2014年03月20日
    19         }
    20     }
    21 }
    字符串替换
  • 相关阅读:
    剑指Offer对答如流系列
    剑指Offer对答如流系列
    KMP算法
    殊途同归
    从m个数中取top n
    用红黑树实现500万数据的动态排序
    返璞归真
    second blog编程之美------控制cpu曲线
    first blog编程之美-----计算1的个数
    mathematica入门学习记录:
  • 原文地址:https://www.cnblogs.com/dlwcg/p/3614474.html
Copyright © 2020-2023  润新知