【发布时间】:2011-12-23 16:47:39
【问题描述】:
我注意到以下几点:
var b1 = Regex.IsMatch("Line1\nLine2", "Line1$", RegexOptions.Multiline); // true
var b2 = Regex.IsMatch("Line1\r\nLine2", "Line1$", RegexOptions.Multiline); // false
我很困惑。 RegexOptions 的文档说:
多行: 多行模式。更改 ^ 和 $ 的含义,使其分别匹配任何行的开头和结尾,而不仅仅是整个字符串的开头和结尾。
由于 C# 和 VB.NET 主要用于 Windows 世界,我猜 .NET 应用程序处理的大多数文件使用 CRLF 换行符 (\r\n) 而不是 LF 换行符 (\n)。尽管如此,.NET 正则表达式解析器似乎无法将 CRLF 换行符识别为 行尾。
我知道我可以解决这个问题,例如,通过匹配 Line1\r?$,但它仍然让我觉得很奇怪。这真的是 .NET 正则表达式解析器的预期行为还是我错过了一些隐藏的 UseWindowsLinebreaks 选项?
【问题讨论】:
标签: c# .net regex line-breaks