none
发现一个正则表达式的Bug!

    问题

  • 字符串以换行符(\n)结尾,匹配出现异常,测试发现所有.net版本都是这个结果,这是Bug吗?

    代码如下:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Text.RegularExpressions;
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine(Regex.IsMatch("abc123", "123$"));       //True
                Console.WriteLine(Regex.IsMatch("abc123\n", "123$"));     //True
                Console.WriteLine(Regex.IsMatch("abc123\r", "123$"));     //False
                Console.WriteLine(Regex.Match("abc123", "$").Index);      //6
                Console.WriteLine(Regex.Match("abc123\n", "$").Index);    //6
                Console.WriteLine(Regex.Match("abc123\n", "\\n").Index);  //6
                Console.WriteLine(Regex.Match("abc123\r", "$").Index);    //7
                Console.WriteLine(Regex.Match("abc123", "$").Index);      //6
                Console.ReadLine();
            }
        }
    }

    2017年3月3日 8:37

答案

  • 已经找到答案了:https://msdn.microsoft.com/zh-cn/library/az24scfc.aspx
    $:匹配必须出现在字符串的末尾或出现在行或字符串末尾的 \n 之前。
    \z:匹配必须出现在字符串的末尾。
    将“$”替换成“\z”,匹配成功了。
    • 已标记为答案 henrypam 2017年3月3日 11:20
    2017年3月3日 11:20