为什么.NET中的多行正则expression式不匹配CRLF?

我注意到了以下几点:

var b1 = Regex.IsMatch("Line1\nLine2", "Line1$", RegexOptions.Multiline); // true var b2 = Regex.IsMatch("Line1\r\nLine2", "Line1$", RegexOptions.Multiline); // false 

我很困惑。 RegexOptions的文档说:

多线 :多线模式。 改变^和$的含义,使它们分别匹配任何行的开始和结束,而不仅仅是整个string的开始和结束。

由于C#和VB.NET主要用于Windows世界,所以我猜想.NET应用程序处理的大多数文件使用CRLF换行符( \r\n )而不是LF换行符( \n )。 尽pipe如此,.NET正则expression式parsing器似乎无法将CRLF 换行识别为行尾

我知道我可以解决这个问题,例如,通过匹配Line1\r?$ ,但它仍然令我感到奇怪。 这是真正的.NET正则expression式parsing器的预期行为还是我错过了一些隐藏的UseWindowsLinebreaks选项?

来自MSDN:

默认情况下,$只匹配inputstring的末尾。 如果指定了RegexOptions.Multiline选项,它将匹配换行符(\ n)或inputstring的结尾。 但是,它不匹配回车符/换行符组合。 要成功匹配它们,请使用子expression式\ r?$而不是$。

http://msdn.microsoft.com/en-us/library/yd1hzczs.aspx#Multiline

所以我不能说为什么(与其他语言的正则expression式兼容?),但至less是它的意图。