domingo, 5 de maio de 2013

Exercitando com Ruby Parte 7 (Expressões Regulares, Técnicas com Variáveis)

Expressões Regulares
Conhecida também como "regex", é uma técnica para "casar" caracteres, palavras, ou um grupo de palavras, podendo buscar ou substitui-los. Como outras linguagens, Ruby também suporta essa técnica. É aconselhado ter conhecimento sobre expressões regulares, pois o resto o Ruby complementa. 
  1. Primeiro passo. Uma expressão é inicializada com barra "/" e finalizada com outra barra. Usando o operador til "~" juntamente com igual "=" o seu retorno padrão diz que a expressão casou, e também retorna a posição da expressão:
    /existe/ =~ /existe algo?/
    => 0
  2. Usando o operador til "~" juntamente com interrogação "!" o seu retorno padrão diz que a expressão não casou (ou seja se existir algo diferente retorna true caso contrário false).
    /que tal/ != /existe algo?/
    => true
  3. Usando match (corresponde):
    exp = /existe/
    puts exp.match("existe algo?")
    => existe
  4. Usando um dos símbolos de gama de caracteres [a-z] (onde irá selecionar todos os caracteres de 'a' á 'z'),. Veja que a mesma expressão usada serviu para casar as duas frases:
    exp = /[a-z]aca/
    frase1 = "era uma vez uma vaca"
    frase2 = "deitei na maca"
    puts exp.match(frase1)
    =>vaca
    puts exp.match(frase2)
    =>maca
  5. Extraindo um valor de uma Tag (note que a expressão coleta todos os elementos entre as tag "> <"):
    tag = '<a href="https://google.com">Preciso de ti</a>'
    p />(.*)</.match(tag)
    =>Preciso de ti
  6. Obtendo data e hora. (A função match retorna um grupo, para acessar use o endereço desse vetor usando "[ ]"):
    datahora = "aqui tem data 06-05-2013 e hora 20:51:38 "
    exp = /(..-..-....).*(..:..:..)/
    val = exp.match(datahora)
    p val[1],val[2]
    => "06-05-2013"
    => "20:51:38"
  7. Trocando posição palavras. (Usei a global de substituição gsub para trocar a ordem das palavras):
    trocar =  "primeiro segundo terceiro".gsub(/(\w+)( )(\w+)/,'\3 \1')
    puts trocar
    => segundo primeiro terceiro
  8. Link muito bom, para editor de expressões regulares com Ruby:
    http://rubular.com/
Técnicas com Variáveis
Preparei algumas dicas para quem tem dúvidas em relação ao tratamento de variáveis em alguns casos distintos.

  1. Definindo tamanho da casa decimal de um numero flutuante. (Defini o numero de casas após a virgula, que seria 2):
    num = 1.23244040234
    p num.round(2)
    =>1.23
  2. Retornando pedaço de uma string. (Busco o carácter da 2 á 5 posição):
    palavra = 'pedaco'
    p palavra.slice(3..5)
    =>aco
  3. Substituindo palavras:
    palavra = "moto"
    p palavra.gsub("o","a")
    =>mata
  4. Caixa alta:
    palavra = "baixo"
    p palavra.upcase
    =>BAIXO
  5. Primeira letra maiúscula:
    palavra = "mundo"
    p palavra.capitalize
    =>Mundo
  6. Invertendo:
    palavra = "roma"
    p palavra.reverse
    =>amor
  7. Procurando algo (a cada resultado armazena em um vetor, no exemplo seguinte verifiquei a quantidade desse vetor):
    palavra = "segundo mundo"
    p palavra.scan('undo')
    =>["undo","undo"]
    p palavra.scan('undo').count
    =>2