c# - letras - ¿Por qué $ en expresiones regulares multilínea de.NET no coincide con CRLF?
expresiones regulares java (1)
Desde MSDN:
Por defecto, $ coincide solo con el final de la cadena de entrada. Si especifica la opción RegexOptions.Multiline, coincide con el carácter de nueva línea (/ n) o al final de la cadena de entrada. Sin embargo, no coincide con la combinación de caracteres de retorno de carro / avance de línea. Para combinarlos con éxito, use la subexpresión / r? $ En lugar de solo $.
http://msdn.microsoft.com/en-us/library/yd1hzczs.aspx#Multiline
Entonces no puedo decir por qué (compatibilidad con expresiones regulares de otros idiomas?), Pero al menos está destinado.
He notado lo siguiente:
var b1 = Regex.IsMatch("Line1/nLine2", "Line1$", RegexOptions.Multiline); // true
var b2 = Regex.IsMatch("Line1/r/nLine2", "Line1$", RegexOptions.Multiline); // false
Estoy confundido. La documentación de RegexOptions dice:
Multilínea : modo multilínea. Cambia el significado de ^ y $ para que coincidan al principio y al final, respectivamente, de cualquier línea, y no solo al principio y al final de la cadena completa.
Como C # y VB.NET se usan principalmente en el mundo de Windows, supongo que la mayoría de los archivos procesados por aplicaciones .NET usan saltos de línea CRLF ( /r/n
) en lugar de saltos de línea LF ( /n
). Aún así, parece que el analizador de expresiones regulares de .NET no reconoce un salto de línea CRLF como fin de línea .
Sé que podría solucionar esto, por ejemplo, haciendo coincidir Line1/r?$
, Pero todavía me parece extraño. ¿Es este realmente el comportamiento previsto del analizador de expresiones regulares de .NET o me perdí alguna opción oculta UseWindowsLinebreaks
?