Я заметил следующее:
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
?