Logo Hardware.com.br
Mattheus Henrique
Mattheus Hen... Geek Registrado
4.5K Mensagens 4 Curtidas

Perl e uma "regular expression"

#1 Por Mattheus Hen... 14/04/2006 - 15:08
eu estou apanhando aqui pra entender porque:
#!/usr/bin/env perl
use warnings;
use strict;

while(<&gt{
if(/[A-Z][^A-Z]+/){
print;
}
}

Não está fazendo o mesmo(combinar qualquer linha que tenha uma palavra com letra maiúscula, mas não a palavra inteira) que:
#!/usr/bin/env perl
use warnings;
use strict;

while(<&gt{
if(/[A-Z][a-z]+/){
print;
}
}


Outra dúvida, porque isso aqui é uma 'match'?
my $teste = "teste";
if($teste =~ /\b\w?\b/){
print $teste . "$&\n";
}


Alguém me dá uma luz?
Kakao
Kakao Super Participante Registrado
645 Mensagens 23 Curtidas
#4 Por Kakao
15/04/2006 - 16:34
Não. Você está confundindo (letras minúsculas) com (quaisquer caracteres que não sejam letras maiúsculas). Este último inclui não apenas letras minúsculas como quaisquer outros caracteres não letras maiúsculas como +-)*&$#@,][/ etc.

Se você continua sem entender consulte o manual do Perl sobre expressões regulares ou um dos milhares de tutoriais na web.
Mattheus Henrique
Mattheus Hen... Geek Registrado
4.5K Mensagens 4 Curtidas
#6 Por Mattheus Hen...
17/04/2006 - 17:16
Kakao
Não. Você está confundindo (letras minúsculas) com (quaisquer caracteres que não sejam letras maiúsculas). Este últim...
Eu compreendo isso, o que eu não estou conseguindo entender é isso olha:
49c0bc712a16dfa15b672be2fa89d534
Então tudo que [a-z] é match, [^A-Z] tinha que ser(e não o contrário), mas não é exatamente isso que eu consigo no meu programa. [^A-Z] não está encontrando o que [a-z] encontra e tinha que encontrar!

Deixei mais claro?
jqueiroz
jqueiroz Cyber Highlander Registrado
104K Mensagens 5.7K Curtidas
#8 Por jqueiroz
17/04/2006 - 17:57
você tem algum exemplo de texto que a regex com "[a-z]" aceitou, e a outra, com "[^A-Z]", não???


Sobre a terceira construção, o "\b" encontra um "word boundary" (vou chamar de "fronteira de palavra"), ou seja, uma transição entre um grupo de caracteres de pontuação ou espaçamento, e um grupo de caracteres alfanuméricos. Mas sua construção é /\b\w?\b/, isso siginifica que você está procurando uma sequência opcional de ["fronteira de palavra" seguida de um caracter de palavra], e depois outra fronteira de palavra.

Ele então está encontrando mais ou menos assim:

(\b\w)? \b
| |
V V
teste


PS: Pq vc usou "#!/usr/bin/env perl" ??? Nunca vi a construção assim... sempre vi (e usei) coisas parecidas com "#!/usr/bin/perl -w"...
"chmod 777 nunca ajudou ninguém" (c) 2002-2021 JQueiroz/FGdH
Conheça o Blog do Zekke
Mattheus Henrique
Mattheus Hen... Geek Registrado
4.5K Mensagens 4 Curtidas
#9 Por Mattheus Hen...
17/04/2006 - 19:43
Nossa gente, dá até vergonha oops.png
No código de fato eu tinha errado. Digitei ^[A-Z] ao invés de [^A-Z] oops.png

jqueiroz, eu estou estranhando aquela minha terceira construção porque eu esperava que ela fosse uma match para um caractere alfanumérico ou nada, não uma palavra como 'teste', são cinco letras afinal, entende? Eu queria que /\b\w?\b/ fosse uma match para um único caractere ou nada(string vazia). Alguma sugestão para tal situação?

Usei "#!/usr/bin/env perl" meio que por 'frescura', mania herdada dos scripts de 'python' que eu fazia no gentoo.

O programinha 'env' é mais 'garantido' de estar em /usr/bin do que o perl, apesar de ser mais lento(coisa de décimos de segundos para iniciar o programa, já que o 'env' busca o 'perl').

Fica mais portável, mas eu corro o risco de chamar o 'perl' errado(em caso de várias versões instaladas ou por algum motivo o cara tem outro 'perl' que é um jogo, não o interpretador)
jqueiroz
jqueiroz Cyber Highlander Registrado
104K Mensagens 5.7K Curtidas
#10 Por jqueiroz
18/04/2006 - 01:55
eu estou estranhando aquela minha terceira construção porque eu esperava que ela fosse uma match para um caractere alfanumérico ou nada, não uma palavra como 'teste', são cinco letras afinal, entende? Eu queria que /\b\w?\b/ fosse uma match para um único caractere ou nada(string vazia). Alguma sugestão para tal situação?


/^\b(\w)?\b$/

Sem o "^" e o "$", vc poderia encontrar esse trecho em qualquer lugar da string. Agora, a string tem que casar com o regex de cabo a rabo.
"chmod 777 nunca ajudou ninguém" (c) 2002-2021 JQueiroz/FGdH
Conheça o Blog do Zekke
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal