Nylon Tecnologia
Mudamos para um dominio proprio.

Acesse nosso novo forum.

http://crawlersnetwork.com/

[tutorial] regex em perl

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

[tutorial] regex em perl

Mensagem por hacker fts315 em Qua Ago 15, 2012 9:04 am

bom galera nesse tutorial vou falar de regex, os regex permite manipular uma string podendo tirar uma parte da string ou simplesmente saber se essa determinada parte existe ou nao, para entender melhor veja a string abaixo

" codename: hacker fts315 \n nome: flavio \n area: programaçao"

imagine se eu fosse fazer um script q pegava apenas a parte "nome: flavio" da string acima '-' , eu poderia fazer uma sub-rotina q captura caracter por caracter ate o a parte quebra de linha (\n) e armazenando em variaveis diferente a cada quebra de linha , depois checar qual das variaveis começa com "nome:", ja imagino o trabalho q isso daria '-', para facilitar existe os regex q permite fazer tudo isso ou ate mais de um jeito rapido e facil, para usar uma regex agente vai fazer uma especie de comparaçao e vamos usar =~ indicando comparaçao e // para usar o regex, veja abaixo uma comparaçao normal entre strings

Código:
#!/usr/bin/perl
$fts = "hacker fts315";
if($fts eq "hacker fts315")
{
  print "igual";
}
else
{
  print "diferente";
}

agora vamos comparar usando o regex

Código:
#!/usr/bin/perl
$fts = "hacker fts315";
if($fts =~ /hacker fts315/)
{
  print "igual";
}
else
{
  print "diferente";
}

a vantagem do regex q eu posso usar apenas uma parte do codigo para comparar veja abaixo usei apenas fts315 para comparar com a string toda, fts315 tem na string entao ele vai retornar verdadeiro se eu usar a comparaçao normal ele ia comparar as duas string (atravez de comparçao de caracter por carecter) e retornaria falso

Código:
#!/usr/bin/perl
$fts = "hacker fts315";
if($fts =~ /fts315/)
{
  print "igual";
}
else
{
  print "diferente";
}

outro exemplo se eu nao soube-se o 315 do fts eu poderia usar . para indicar qualquer caracter

Código:
#!/usr/bin/perl
$fts = "hacker fts315";
if($fts =~ /fts.../)
{
  print "igual";
}
else
{
  print "diferente";
}

quando eu quero colocar um caracter qualquer mais especificar quais, eu uso [] e dentro eu coloco os caracter por exemplo a ate z minusculo seria [a-z], numero 0 ate 9 [0-9], veja o exemplo abaixo se tiver 3 numeros depois do fts o resultado retorna verdadeiro e exibe igual, se nao ele retorna falso e exibe diferente

Código:
#!/usr/bin/perl
$fts = "hacker fts315";
if($fts =~ /fts[1-9][1-9][1-9]/)
{
  print "igual";
}
else
{
  print "diferente";
}

quando agente quer q regex nao diferencie maiusculo e minusculo agente usa i no final da regex //i

Código:
#!/usr/bin/perl
$fts = "hacker fts315";
if($fts =~ /FtS315/i)
{
  print "igual";
}
else
{
  print "diferente";
}

quando agente necessita usar o barra / em uma regex agente tem q colocar contra-barra antes \/

Código:
#!/usr/bin/perl
$fts = "hacker / fts315";
if($fts =~ /hacker \/ fts315/)
{
  print "igual";
}
else
{
  print "diferente";
}

agora q agente aprendeu o basico vamos aprender a capturar parte da string, nem vou usar codiçao if aq apena o regex e comparaçao dele, para caputrar uma parte agente coloca entre parenteses o texto, e atribuimos tudo a uma array, depois so ler a posiçao da array

Código:
#!/usr/bin/perl
$fts = "hacker fts315";
@hack = $fts =~ /(fts315)/;
print $hack[0];

veja outro exemplo ele capturando apenas o numero

Código:
#!/usr/bin/perl
$fts = "hacker fts315";
@hack = $fts =~ /fts(315)/;
print $hack[0];

no exemplo abaixo ele armazena o fts em uma posiçao e o numero em outra

Código:
#!/usr/bin/perl
$fts = "hacker fts315";
@hack = $fts =~ /(fts)(315)/;
print $hack[0];
print "\n";
print $hack[1];

na source abaixo armazena o fts315 em uma posiçao o fts em outra e 315 em outra

Código:
#!/usr/bin/perl
$fts = "hacker fts315";
@hack = $fts =~ /((fts)(315))/;
print $hack[0];
print "\n";
print $hack[1];
print "\n";
print $hack[2];

bom galera isso e o basico de regex existem muitas coisas q da para fazer ^^

by hacker fts315
avatar
hacker fts315
Membro

Mensagens : 53
Pontos : 4035
Reputação : 32
Data de inscrição : 12/08/2012

Ver perfil do usuário http://endoffile.umforum.net

Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum