quarta-feira, 11 de janeiro de 2012

Expressões Regulares III

Continuando a saga das expressões regulares, vamos experimentar a negação. Neste caso são considerados todos os caracteres exceto aqueles listados. Vamos ver uns exemplos:


Veja que achou todos os caracteres exceto [abc]. Podemos escrever [abc] como [a-c]. Este formato é o de intervalos ou faixas. Vamos ver alguns testes.


No 1º exemplo acima vemos que só listou 3 elementos, pois Arq4 tem a primeira letra em maiúscula e como a busca é sensível ao caso não funciona. No 3º exemplo, consertamos isto. Veja que mesmo uma coisa aparentemente absurda como a pesquisa [a-f][aeiou][rte] em um trecho do romance Helena de Machado de Assis retorna alguns resultados. Veja que foram localizadas as combinações [eir], [bar], [dor], [cur], [dar] e [for]. Se olharmos para a expressão regex vemos que a primeira letra de cada combinação está entre a e f, a segunda é uma vogal e a terceira é r, t ou e.

Podemos utilizar de negação juntamente com a seleção de faixas:

Vamos dizer que temos uma base de dados numérica e queremos achar números entre 3200 e 3299, exceto os terminados com 3, 4, 5 ou 6.

Usamos 32.. para localizar conjuntos de 4 elementos começados com 32. Conseguimos localizar uma parte da nossa seleção. Mas não conseguimos retirar os elementos indesejados. Para isto temos que tratar os 2 caracteres finais de expressão.

Utilizamos então a expressão 32.[^3-6], conseguimos retirar as sequências terminadas em 3, 4, 5 ou 6, mas ainda estamos obtendo alguns resultados indesejados como por exemplo [326 ].
Para ter certeza que só estamos pesquisando números não podemos utilizar [.], temos que filtrar pelos números, ou seja, utilizar a expressão [0-9]. Assim a expressão final fica 32[0-9][0-9&&[^3-6]]. Parece confuso não é? Veja abaixo o resultado. É o queríamos. Vamos entender então a expressão

3     --> o primeiro caracter é sempre 3
2     --> o segundo caracter é sempre 2
[0-9] --> o terceiro caracter é 0, 1, 2, 3, 4, ... até 9
[0-9&&[^3-6]] --> o quarto caracteres aceita somente números, mas são desconsi-
                  derados os números de 3 a 6. Lembrando [^3-6] quer dizer
                  caracteres que não estão na faixa de 3 a 6.


Continua em quarta parte >>>

Nenhum comentário:

Postar um comentário