Perl Regex: negar classe de caractere dá resultados inesperados

0

Imaginando se alguém está tendo um problema com o perl 5.14 no ubuntu 12.04 quando se trata de negar uma classe de caractere em Perl.

Considerando o pequeno snippet a seguir

while(<>) {

    print if /[^Dd]an/;
}

Com a seguinte entrada pequena

Dan
Frank
Steve
daniel

Eu esperaria

Frank
Steve

para ser impresso no terminal, em vez disso, só recebo o Frank.

Estou apenas imaginando se mais alguém estava tendo um problema semelhante e descoberto qual era o problema. Vou pesquisar um pouco e ver se consigo fazer algo que atualizarei se encontrar algo

Felicidades

    
por cpowel2 09.02.2013 / 01:05

1 resposta

4

A expressão regular

/[^Dd]an/

Na verdade, não corresponde a Steve . Basicamente, você está combinando todas as linhas com a sequência an , exceto aquelas que precedem com D ou d . Eu não vejo como você espera que combine com Steve.

Eu acho que o comportamento está correto. Lembre-se de que a negação só se aplica aos caracteres na seção [] .

    
por gertvdijk 09.02.2013 / 01:29