C# 正则表达式模式失败

C# 正则表达式模式失败,c#,regex,C#,Regex,我正在尝试一个子字符串,以查找从字符串开头到具有转义序列“\r\n\r\n”的点,我的正则表达式是regex completeCall=new regex(@“^.+?\r\n\r\n”,RegexOptions.Compiled)只要您只有像123\r\n\r\n这样的字符串,它就工作得很好,但是一旦您有了模式123\r\n 456\r\n\r\n,模式就不再匹配了 对我做错了什么有什么建议吗 Regex completeCall = new Regex(@"^.+?\r\n\r\n", Re

我正在尝试一个子字符串,以查找从字符串开头到具有转义序列
“\r\n\r\n”
的点,我的正则表达式是
regex completeCall=new regex(@“^.+?\r\n\r\n”,RegexOptions.Compiled)
只要您只有像
123\r\n\r\n
这样的字符串,它就工作得很好,但是一旦您有了模式
123\r\n 456\r\n\r\n
,模式就不再匹配了

对我做错了什么有什么建议吗

Regex completeCall = new Regex(@"^.+?\r\n\r\n", RegexOptions.Compiled);
Regex junkLine = new Regex(@"^\D", RegexOptions.Compiled);
private void ClientThread()
{
    StringBuilder stringBuffer = new StringBuilder();
    (...)
    while(true)
    {
        (...)
        Match match = completeCall.Match(stringBuffer.ToString());
        while (Match.Success) //once stringBuffer has somthing like "123\r\n  456\r\n\r\n" Match.Success always returns false.
        {
            if (junkLine.IsMatch(match.Value))
            {
                   (...)
            }
            else
            {
                   (...)
            }
            stringBuffer.Remove(0, match.Length); // remove the processed string
            match = completeCall.Match(stringBuffer.ToString()); // check to see if more than 1 call happened while the thread was sleeping.
        }
        Thread.Sleep(1000);
    }
编辑此处是导致其失败的数据(\r\n转换为实际换行符)


正则表达式中的
与换行符不匹配。您需要指定
RegexOptions.Singleline
选项来解决这个问题


不知怎的,我认为vfilby真的是指这个选项

正则表达式中的
与换行符不匹配。您需要指定
RegexOptions.Singleline
选项来解决这个问题


不知怎的,我认为vfilby真的是指这个选项

模式
^.+?\r\n\r\n
与字符串
123\r\n\r\n
匹配,因为
123
不包含换行符(默认情况下,
与.NET中的
\n
不匹配)。要使您的模式也匹配
123\r\n 456\r\n\r\n
,请启用点-全部选项:

`(?s)^.+?\r\n\r\n`

模式
^.+?\r\n\r\n
与字符串
123\r\n\r\n
匹配,因为
123
不包含换行符(默认情况下,
与.NET中的
\n
不匹配)。要使您的模式也匹配
123\r\n 456\r\n\r\n
,请启用点-全部选项:

`(?s)^.+?\r\n\r\n`

实际上,在.NET正则表达式中,点确实匹配
\r
;唯一不匹配的是
\n
。啊,显然,我不知道。谢谢你的信息@Alan!据此编辑了我的答案。当我得知这件事时,我感到非常惊讶。NET正则表达式的风格从第一天起就对Unicode非常熟悉;它怎么能不像Java那样支持所有Unicode行分隔符呢?实际上,在.NET正则表达式中,点确实匹配
\r
;唯一不匹配的是
\n
。啊,显然,我不知道。谢谢你的信息@Alan!据此编辑了我的答案。当我得知这件事时,我感到非常惊讶。NET正则表达式的风格从第一天起就对Unicode非常熟悉;它怎么能像Java那样不支持所有Unicode行分隔符呢?