• λ我爱Aspx >> Asp.Net >> 解读C#中的规则表达式(正则表达式)
  • 解读C#中的规则表达式(正则表达式)

  • :未知  Դ:非寒日志  :2007-4-21 0:46:13  ؼ:
  • Console.WriteLine("Match="+m.ToString());

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

    字符串的替换

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

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

    它返回字符串zzzzcadzzzz,所有匹配的字符串都被替换成了zzzzz。

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

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

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

    上面的模式对于删除任意字符串中的前导和后续空格都非常有用。在C#中,我们还经常使用字母字符串,在一个字母字符串中,编译程序不把字符“ \” 作为转义字符处理。在使用字符“\”指定转义字符时,@"..."是非常有用的。另外值得一提的是$1在字符串替换方面的使用,它表明替换字符串只能包含被替换的字符串。

    匹配引擎的细节

    现在,我们通过一个组结构来理解一个稍微复杂的例子。看下面的例子:

    string text = "abracadabra1abracadabra2abracadabra3";

    string pat = @"

    ( # 第一个组的开始

    abra # 匹配字符串abra

    ( # 第二个组的开始

    cad # 匹配字符串cad

    )? # 第二个组结束(可选)

    ) # 第一个组结束

    + # 匹配一次或多次

    ";

    //利用x修饰符忽略注释

    Regex r = new Regex(pat, "x");

    //获得组号码的清单

    int[] gnums = r.GetGroupNumbers();

    //首次匹配

    Match m = r.Match(text);

    while (m.Success)

    {

    //从组1开始

    for (int i = 1; i < gnums.Length; i++)

    {

    Group g = m.Group(gnums[i]);

    //获得这次匹配的组

    Console.WriteLine("Group"+gnums[i]+"=["+g.ToString()+"]");

    //计算这个组的起始位置和长度

    CaptureCollection cc = g.Captures;

    for (int j = 0; j < cc.Count; j++)

    {

    Capture c = cc[j];

    Console.WriteLine(" Capture" + j + "=["+c.ToString()

    Ҷƪл˵?
  • һƪ.net打包自动安装数据库
    һƪC#中的特性(Attributes)