Fork me on GitHub

Viagens, opiniões e afins

by Andre Fonseca


Usando Expressões Regulares

Copiando os demais blogs e inaugurando minha coluna de pergunta e respostas, gostaria de começar por um email enviado para a lista do riojug. No email, a pessoa dizia que precisa retirar todos os traços, ”- “, de seu texto que não tivessem “sentido” : traços sozinhos, traços que não fossem de ligação, etc. Ele inclusive mandou um exemplo esclarecedor

- guarde-o – senão guardarei-o eu — Joãozinho-”;

No texto acima os traços a serem substituídos seriam : o primeiro, o traço antes do senão, os 3 traços seguidos e o traço do fim.
Para resolver isso poderiamos partir para várias soluções; uma mais elegantes que as outras, e vice-versa:

  • Varrer caracter a caracter e verificar: ler como um array de char e ficar verificando se o anterior é espaço, traço, etc…. Em pseudo codigo seria
  • char letras[] = <string em questão>
    letras.each{|i,l|
    if i = 0 then
        if l='-' then replace
    else
        if l='-'- and (letras[i-1]=' '  or letras[i-1]='-' or letras[i-1]=':')............ // e continua
    }

    so de ler e tentar fazer já dá medo…. e olhem que eu já vi coisas assim implementadas !!!

  • Usar expressões regulares.
  • Expressões regulares são uma forma de representar conjuntos de caracteres que estão sobre um certa regra. São como dicas que damos a quem procura, para que ele ache o que queremos. como analogia poderiamos imaginar que alguém nos pede para chamarmos uma outra pessoa. Para isso elas nos dá indicativos de como encontrá-la : alta, magra ou gorda, perto de um homem ou mulher, proxima a porta, etc… Transpondo isso para textos, expressoes regulares seriam como esta dicas.
    Expressões Regulares foram criadas pelo ano de 1943 por dois neurologistas. Anos mais tarde, um matemático, modelou algebricamente isso, dando o “ponta pé inicial”. Em 1968, graças ao unix, encontrou sua veia computacional, por meio do editor. Era chamado pelo comando ed. Este ed tinha o comando de contexto g, que aceitava expressões regulares e um comando p, e sua sintaxe ficava g/RE/p (“Global Regular Expression Print”), que deu origem ao aplicativo grep, que por sua vez originou o egrep.[fonte: guia de expressões regulares - aurélio marinho Vargas, Editora novatec]
    Bem vamos ao código

    String.replaceAll("[^[:alnum:]][-][^[:alnum:]|[-]$|[-][[:punct:]]|^[-]")

    Lindo não ?!?!? Uma linha …..
    Quem se interessar pelo assunto pode ler o livro on line do Aurelio Marinho, Novatec, que é uma fonte riquissima para isso. (clique aqui)

    Published by Andre, on abril 4th, 2009 at 11:32 am. Filled under: codigo,InformáticaNo Comments

    No comments yet.

    Leave a Reply