O caractere de ponto do .NET Regex corresponde ao retorno de carro?
Cada sabor único de regex que eu já usei sempre teve o "." o caractere corresponde a tudo, exceto uma nova linha (\ r ou \ n) ... a menos que você ative o sinalizador de linha única.
Então, quando tentei o seguinte código C #, fiquei chocado:
Regex rgx = new Regex(".");
if (rgx.Match("\r\n").Success)
MessageBox.Show("There is something rotten in the state of Redmond!");
Mostrou a mensagem. Apenas para ter certeza de que não estava ficando louco, tentei o seguinte código JavaScript:
if (/./.test("\r\n"))
alert("Something's wrong with JavaScript too.");
O JavaScript não mostrou a mensagem, o que significa que está funcionando exatamente como deveria.
Aparentemente, o "." O caractere no .NET está correspondendo ao caractere "\ r". Eu verifiquei odocumentação para ver se a menção menciona algo sobre isso:
Caractere curinga: corresponde a qualquer caractere, exceto \ n.
Uau ... desde quando é que um sabor Regexsempre o ponto corresponde a um retorno de carro? Você pensaria que o .NET se comportaria como todos os demais tipos de Regex ... especialmente porque está em um ambiente Windows que usa "\ r \ n" como delimitadores de linha.
Existe algum sinalizador / configuração que eu possa ativar para fazê-lo funcionar como em outros tipos de Regex? Existem soluções alternativas que não envolvam a substituição de todas.
caracteres com[^\r\n]
?