[SP-pm] Ajuda expressão regular

Vitor Serra Mori vsmori em molden.com.br
Segunda Julho 31 06:53:15 PDT 2006


Jorge, 

Ai vai :

----------------------------------------------------------------------
my @arr;          # Array com as linhas do arquivo
my $d1;           # Dado 1
my $d2;           # Dado 2

open FH, 'a.txt'; # Abre arquivo e carrega linhas em @arr
@arr = <FH>;
close FH;

for (@arr) {      # Loop para extrair dados
  $_ =~ /ifDescr\.(\d+).*STRING:(.*)/;
  ($d1,$d2) = ($1,$2);
  $d1 =~ s/[Shelf|on|Slot]//g;

  printf "%s %s\n",$d1,$d2;
}
----------------------------------------------------------------------

Gerou o seguinte resultado :

837  Ethernet Shelf 1/9/1
838  Gigabit Ethernet 1/9/4
839  Loopback on shelf 1 slot 9
840  Reject on shelf 1 slot 9
841  Black Hole on shelf 1 slot 9
842  Inactive on shelf 1 slot 9
843  Local on shelf 1 slot 9
844  Multi Cast on shelf 1 slot 9
845  Console Port 1/9/2
846  VRouter: main
847  Stinger ATM Int Slot 1/9/3

É claro que o método para ler o arquivo não é o mais indicado ... Mas para o
próprosito de gerar a solução rapidamente funciona ....

Abraços,

Vitor

-----Original Message-----
From: saopaulo-pm-bounces+vsmori=molden.com.br em pm.org
[mailto:saopaulo-pm-bounces+vsmori=molden.com.br em pm.org] On Behalf Of Jorge
Teles
Sent: segunda-feira, 31 de julho de 2006 10:05
To: saopaulo-pm em mail.pm.org
Subject: Ajuda expressão regular

Olá pessoal, 

estou tentando fazer há alguns dias uma expressão regular com os dados
abaixo, e querendo obter os seguintes dados: 
- O números depois de "ifDescr.";
- As strings depois de "STRING:", excluindo a string
Shelf|on|Slot;

IF-MIB::ifDescr.837 = STRING: Ethernet Shelf 1/9/1
IF-MIB::ifDescr.838 = STRING: Gigabit Ethernet 1/9/4
IF-MIB::ifDescr.839 = STRING: Loopback on shelf 1 slot
9
IF-MIB::ifDescr.840 = STRING: Reject on shelf 1 slot 9
IF-MIB::ifDescr.841 = STRING: Black Hole on shelf 1 slot 9
IF-MIB::ifDescr.842 = STRING: Inactive on shelf 1 slot
9
IF-MIB::ifDescr.843 = STRING: Local on shelf 1 slot 9
IF-MIB::ifDescr.844 = STRING: Multi Cast on shelf 1 slot 9
IF-MIB::ifDescr.845 = STRING: Console Port 1/9/2
IF-MIB::ifDescr.846 = STRING: VRouter: main
IF-MIB::ifDescr.847 = STRING: Stinger ATM Int Slot
1/9/3


A expressão que tenho é a seguinte:

.*?\.(\d+)\s.*?\:\s(\w+\s?\w+)

Essa expressão me traz para a primeira linha:
"Ethernet Shelf", tendo eu depois que substituir Shelf por nada, mas o
problema maior é o da última linha, pois preciso da palavra "Int" junto com
a string "Stinger ATM", ou seja preciso de "Stinger ATM Int".
Quando tento então adicionar mais comandos a minha expressão regular, acabo
pegando os números no final da linha, por exemplo "1/9/1".

Minha pergunta é: Posso e como fazer condições dentro da expressão regular?
Alguem teria alguma referência para pesquisar?

Jorge Teles



__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around
http://mail.yahoo.com _______________________________________________
SaoPaulo-pm mailing list
SaoPaulo-pm em pm.org
http://mail.pm.org/mailman/listinfo/saopaulo-pm




Mais detalhes sobre a lista de discussão SaoPaulo-pm