shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Re: expressão regular


From: Valdir
Subject: Re: [shell-script] Re: expressão regular
Date: Wed, 5 Dec 2007 17:30:45 -0200

De tanto eu ler e-mail de expressão regulares, onde eu posso encontrar um 
apostila que possa praticar e apreder a usar, assim como Shell Script.

OBS: de preferência apostilas em português.

Abraço 

Valdir
  ----- Original Message ----- 
  From: Josenivaldo Benito Junior 
  To: address@hidden 
  Sent: Wednesday, December 05, 2007 4:51 PM
  Subject: Re: [shell-script] Re: expressão regular


  Oi,

  eu acho que expressei-me mau.

  não existe a forma

  GG482733 (que sua expressão pegaria)

  O formato correto é: duas letras+dois números+duas letras+dois números+duas
  letras

  O comprimento total é no máximo 12, mas o mais comum é 4 ou 6 como por
  exemplo:

  GG48LH
  GG67
  GG48
  JH32HG
  ...

  É mais ou menos assim:

  GG -> indica uma grade grande (de latitude e longitude) (quadrada)
  GG48 -> se você dividir o quadro GG em pedacinhos (o tamanho não vem ao
  caso), GG48 representa um dos pedacinhos de GG (um quadro)
  GG48LH -> novamente, divide o quadro GG48 em vários pedaços e GG48LH é um
  desses pedaços, GG48JG é outro e assim vai.

  Exemplo prático:

  O localizador da minha residência é GG67MH (com 6 digitos). Dependendo da
  aplicação eu posso informar:

  GG67 (menos preciso)
  GG67MH (mais preciso)

  Então, o comum na aplicação é aparecerem localizadores, um por linha, assim:

  GG67
  GG35AF
  GG67MH
  GG48LH
  GG67LH
  DF45OP
  DF54

  Eventualmente podem aparecer:

  GG67AF33
  JH34RD25ES

  Mas não estou me preocupando com estes casos, posso cortá-los em 6 digitos
  sem perda de informação relevante à minha aplicação. Cortando esses dois
  exemplo fica:

  GG67AF
  JH34RD

  Mas, não posso aumentar um grid de 4 digitos para para 6 arbitrariamente,
  por exemplo:

  usuário entra com GG48
  eu não posso assumir GG48LH ou GG48JH ou GG48EJ ... tenho que considerar
  apenas GG48

  O que eu tentei fazer inicialmente era consistir qualquer sequencia agrupada
  de duas letras+dois numeros+duas letras+dois numeros e assim por diante. Só
  para ter certeza que não entrem coisas inválidas como?

  GGLH
  ou
  2235
  ou
  22LH
  (tem que começar por letra obrigatoriamente e sempre apos duas letras vem um
  numero, depois pode vir duas letras e assim vai)

  De fato, o que preciso é que, independente do comprimento (que eu sempre vou
  garantir ser maior que 4), a string comece por duas letras seguidas por dois
  numeros, eventualmente seguidos por mais duas letras que, eventualmente,
  podem estar seguidas de dois números e assim por diante.

  A expressão do Thiago acertou na lata. Mas, existe algum motivo especial
  para não funcionar no grep? Tipo:

  [rdlxsr02][wjb069_teDebug][/home/sw/wjb069]
  > echo GG48LH|sed -r 's/([A-Z]{2}[0-9]{2})+[A-Z]{2}?/|&|/'
  |GG48LH|

  [rdlxsr02][wjb069_teDebug][/home/sw/wjb069]
  > echo GG48|sed -r 's/([A-Z]{2}[0-9]{2})+[A-Z]{2}?/|&|/'
  |GG48|

  [rdlxsr02][wjb069_teDebug][/home/sw/wjb069]
  > echo GG48LH33|sed -r 's/([A-Z]{2}[0-9]{2})+[A-Z]{2}?/|&|/'
  |GG48LH33|

  [rdlxsr02][wjb069_teDebug][/home/sw/wjb069]
  > echo GG48LH33|grep '([A-Z]{2}[0-9]{2})+[A-Z]{2}?'

  [rdlxsr02][wjb069_teDebug][/home/sw/wjb069]
  > echo GG48LH33|grep "([A-Z]{2}[0-9]{2})+[A-Z]{2}?"

  O grep não imprime o match. Comi bronha?

  Obrigado pelas dicas de todos
  Abraço
  Benito

  >

  On 12/5/07, voyeg3r <address@hidden> wrote:
  >
  > --- Em address@hidden<shell-script%40yahoogrupos.com.br>,
  > "Josenivaldo Benito Junior"
  > <jrbenito@...> escreveu
  > >
  > > Olá turma,
  > >
  > > Estou apanhando de uma expressão regular. Para ser sincero já não
  > sei dizer
  > > se ela é possível (deve ser o sono).
  > >
  > > Preciso pegar strings do tipo:
  > >
  > > GG48LH
  > > JH23
  > > JH45ER
  > > FJ87SA76
  > >
  > > Resumindo:
  > >
  > > Sempre tem duas letras (de A até Z) seguidas de dois números (de 0
  > até 9),
  > > podendo estar seguidos mais duas letras, podendo estar seguido de
  > mais dois
  > > números. (duas letras,dois nros., duas letras, dois nros). Mas a
  > informação
  > > pode ter 2,4,6 ou 8 letras (1,2,3 ou 4 conjuntos de letras e números).
  > >
  > > O que são essas coisas? Coordenadas em formato World Locator. De
  > fato podem
  > > ir até 12 algarismos, o comum é 4 ou 6. Na aplicação que estou tentando
  > > capturar podem chegar a 8.
  > >
  > > Tentei algumas coisas básicas. O mais próximo que cheguei foi:
  > >
  > > [A-Z]{2}[0-9]{2}
  >
  > ============================
  > se o conjunto de números pode ir até 6 faça:
  >
  > [A-Z]{2}[0-9]{2,6}
  >
  > >
  > > Que pega um par de letras somente se for seguido de um par de
  > números. Para
  > > uma string tipo GG48LH23JV vai funcionar em dois matches, tem algum
  > problema
  > > nisso?
  > >
  > > Pegar um par de letras+um par de números e assim por diante, não resolve
  > > toda a situação, pois em 90% dos casos são usados 6 algarismos (ex:
  > GG67MH).
  > >
  > > Alguém pode me dar uma dica?
  > >
  > > Valeu.
  > > Benito
  > >
  > >
  > > [As partes desta mensagem que não continham texto foram removidas]
  > >
  >
  > 
  >

  [As partes desta mensagem que não continham texto foram removidas]



   

[As partes desta mensagem que não continham texto foram removidas]



reply via email to

[Prev in Thread] Current Thread [Next in Thread]