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: Josenivaldo Benito Junior
Subject: Re: [shell-script] Re: expressão regular
Date: Wed, 5 Dec 2007 16:56:34 -0200

Só acrescentando,

o site http://regexpal.com/

Também interpreta ao ER do Thiago diferente. Ele da match em strings de 6
digitos mas não da match em 4 digitos nem em 8 como o sed. Alguma explicação
para isso?

Exemplo usado no site:

JJ34            => não pega
GG47LH      => pega
FG37LL33     => não pega
FG37LL33JK ==> pega

Todas são válidas. No sed fica assim:

[rdlxsr02][wjb069_teDebug][/home/sw/wjb069]
> cat ttt | sed -r 's/([A-Z]{2}[0-9]{2})+[A-Z]{2}?/|&|/'
|JJ34|
|GG47LH|
|FG37LL33|
|FG37LL33JK|

Ou seja, pega todas!

Muito obrigado,
Benito.


On 12/5/07, Josenivaldo Benito Junior <address@hidden> wrote:
>
> 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]



reply via email to

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