• λ我爱Aspx >> C#.Net >> 完全解读C#.NET中的正则表达式
  • 完全解读C#.NET中的正则表达式

  • :aspxer  Դ:internet  :2007-5-7 13:28:25  ؼ:.net
  • 如果想使用匹配的字符串,可以把它转换成一个字符串:

    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];

    Ҷƪл˵?
  • һƪC#语言中的重要知识详细介绍与解释
    һƪ实例学C#.net下轻松制作不规则窗体