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行分隔符呢?