Я заметил следующее:
var b1 = Regex.IsMatch("Line1\nLine2", "Line1$", RegexOptions.Multiline); // true
var b2 = Regex.IsMatch("Line1\r\nLine2", "Line1$", RegexOptions.Multiline); // false
Я в замешательстве. В документации RegexOptions говорится:
Multiline: Многострочный режим. Изменяет значение ^ и $, чтобы они соответствовали в начале и конце любой строки, а не только началу и концу всей строки.
Так как С# и VB.NET в основном используются в мире Windows, я бы предположил, что большинство файлов, обработанных приложениями .NET, используют CRLF linebreaks (\r\n
), а не LF linebreaks (\n
). Тем не менее, похоже, что синтаксический анализатор регулярных выражений .NET не распознает линию строк CRLF как конец строки.
Я знаю, что я мог бы обойти это, например, путем сопоставления Line1\r?$
, но это все еще кажется мне странным. Это действительно предполагаемое поведение анализатора .NET regexp или мне не хватает скрытой опции UseWindowsLinebreaks
?