solo regulares regular letras expresiones expresion especiales espacios espacio ejemplos cualquier caracteres caracter blanco alfanumerico c# .net regex line-breaks

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 ?