正则,帮看看

C# code

        static public string GetMatch(string input, string pattern)
        {
            Regex re = new Regex(pattern);
            Match myMatch = re.Match(input);
            if (myMatch != null)
            {
                return myMatch.Value;
            }
            else
            {
                return "";
            }
        }



C# code

            strContent = "  121.189.226.72 1253432292 1253432292\r\n";
            string strMatch = GetMatch(strContent, @".*(?:(\r\n))");



为何 strMatch 结果为 " 121.189.226.72 1253432292 1253432292\r\n"
( 我认为应该是 " 121.189.226.72 1253432292 1253432292")

非捕获组 (?:(\r\n)) 不起作用 ?

作者: yzm888   发布时间: 2011-06-16

.*(?:(\r\n))
.*使用贪婪模式匹配到 121.189.226.72 1253432292 1253432292\r
然后开始匹配\n,失配后回溯一次。
.*匹配 121.189.226.72 1253432292 1253432292
\r\n匹配后面的\r\n
结果记录到分组1,外面又多了一层括号进行组合并取消外层的组合。
所以结果就是你看到的。

我估计你笔误,想写

@".*(?=(\r\n))

作者: wuyazhe   发布时间: 2011-06-16

C# code
strContent = "  121.189.226.72 1253432292 1253432292\r\n";
string strMatch = GetMatch(strContent,@".*(?=\r\n)");

作者: wuyazhe   发布时间: 2011-06-16


为什么不直接用replace替换掉。。。\r\n??

作者: porschev   发布时间: 2011-06-16