Según el .Net Standard :
La opción
RegexOptions.Multiline, o la opciónminline, permite que el motor de expresiones regulares maneje una cadena de entrada que consta de varias líneas. Cambia la interpretación de los elementos de lenguaje^y$para que coincidan con el principio y el final de una línea, en lugar del principio y el final de la cadena de entrada.De forma predeterminada,
$coincide solo con el final de la cadena de entrada. Si especifica la opciónRegexOptions.Multiline, coincide con el carácter de nueva línea (\n) o con el final de la cadena de entrada .
(énfasis mío)
Esto parece decir que $ coincide con el carácter de nueva línea. Sin embargo, este no parece ser el caso. El código:
var m = Regex.Match("123\n456", @"123$", RegexOptions.Multiline); Console.WriteLine(m.Length); imprime 3 , no 4 como se esperaría si $ coincidiera con la newline .
¿Es esto un error? ¿Un error de documentación?
Este es un error de documentación ya que cualquier ancla ( ^ , $ , \A , \Z , \z , \G ) son aserciones de ancho cero y no consumen texto. Los patrones que no consumen solo coinciden con las posiciones dentro de una cadena, no con el texto en sí.
Si especifica la opción RegexOptions.Multiline , el ancla $ coincide con la posición inmediatamente anterior a un carácter de nueva línea ( \n , carácter de salto de línea (LF)) o al final de la cadena de entrada.