正则表达式模式失败

时间:2010-04-28 14:10:21

标签: 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

此处编辑是导致其失败的数据(\ 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);
    }

2 个答案:

答案 0 :(得分:1)

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

不知何故,我认为vfilby真的意味着这个选择。 =)

答案 1 :(得分:0)

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

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