zoukankan      html  css  js  c++  java
  • 正则第一天

    关于net正则总是看了又忘,忘了又看,一串复杂的东西自己也没看懂,没关系,今天再来开始,一点一点来,不断去做学习

    名 字空间简介

      在名字空间中仅仅包含着6个类和一个定义,它们是: 

    Capture: 包含一次匹配的结果; 
    CaptureCollection: Capture的序列; 
    Group: 一次组记录的结果,由Capture继承而来; 
    Match: 一次表达式的匹配结果,由Group继承而来; 
    MatchCollection: Match的一个序列; 
    MatchEvaluator: 执行替换操作时使用的代理; 
    Regex: 编译后的表达式的实例。

     

        Regex类中还包含一些静态的方法:

    Escape: 对字符串中的regex中的转义符进行转义; 
    IsMatch: 如果表达式在字符串中匹配,该方法返回一个布尔值;

    Match: 返回Match的实例; 
    Matches: 返回一系列的Match的方法;

     
    Replace: 用替换字符串替换匹配的表达式; 
    Split: 返回一系列由表达式决定的字符串; 


    Unescape:不对字符串中的转义字符转义。 

     

    简单匹配

     

    我们首先从使用Regex、Match类的简单表达式开始学习。 

    Match m = Regex.Match("abracadabra", "(a|b|r)+");

    我们现在有了一个可以用 于测试的Match类的实例,例如:if (m.Success)...
    如果想使用匹配的字符串,可以把它转换成一个字符串: 

    Console.WriteLine("Match="+m.ToString());

    这 个例子可以得到如下的输出: Match=abra。这就是匹配的字符串了。 

    View Code
    private void button1_Click(object sender, EventArgs e)
            {
                Match m = Regex.Match("abracadabra", "(a|b|r)+");
                if (m.Success)
                {
                    MessageBox.Show(m.ToString());
                }
            }

     解释一下每个符号的意思

    x|y

    匹配 x 或 y。例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"。

    ( ) 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 \( 和 \)。
    * 匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。
    + 匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。
    ? 匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}。
    {n} n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。
    {n,} n 是一个非负整数。至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。
    {n,m}

    m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。

    字符串的替换

    简单字符串的替换非常直观。例如下面的语句: 

    string s = Regex.Replace("abracadabra", "abra", "zzzz");

     

     现在我们来看一个比较复杂的字符串替换的例子:

    string s = Regex.Replace(" abra ", @"^\s*(.*?)\s*$", "$1");

    这个语句返 回字符串abra,其前导和后缀的空格都去掉了。

    $ 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 '\n' 或 '\r'。要匹配 $ 字符本身,请使用 \$
    ^ 匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。要匹配 ^ 字符本身,请使用 \^。
    \s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
    \S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
    . 匹配除换行符 \n之外的任何单字符。要匹配 .,请使用 \。
    $ 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 '\n' 或 '\r'。要匹配 $ 字符本身,请使用 \$。

    另外值得一提的是$1在字符串替换方面的使用,它表明替换字符串只能包含被替换的字符串。

    面的模式对于删除任意字符串中的前导和后续空格都非常有用

    另外值得一提的是$1在字符串替换方面的使用,它表明替换字符串只能包含被替换的字符串。这句话是啥意思我也没理解,希望有人看到能告诉我一下

     

  • 相关阅读:
    11111 Generalized Matrioshkas
    Uva 442 Matrix Chain Multiplication
    Uva 10815 Andy's First Dictionary
    Uva 537 Artificial Intelligence?
    Uva 340 MasterMind Hints
    SCAU 9508 诸葛给我牌(水泥题)
    Uva 10420 List of Conquests(排序水题)
    Uva 409 Excuses, Excuses!
    10/26
    11/2
  • 原文地址:https://www.cnblogs.com/wangchuang/p/2467230.html
Copyright © 2011-2022 走看看