Linguagem C - Projeto Espião IV
Linguagem C - Projeto Espião III
2796 registros
0 hoje
6 nesta semana
4 neste mês| 88,3% | | Brasil |
| 9,2% | | Portugal |
| 0,8% | | EUA |
| 0,2% | | Espanha |
| 0,1% | | Alemanha |
| Hoje: | 338 |
| Ontem: | 1940 |
| Esta semana: | 2278 |
| Semana passada: | 12942 |
| Este mês: | 2278 |
| Mês passado: | 52379 |
| Total: | 123563 |
|
Sex 17 Ago 2007 18:37 |
|
|
O nome "expressão regular" vem de uma teoria matemática na qual este princípio de caracterização se baseia. Já sei. Falou em matemática, todo mundo se arrepia, mas não se preocupe: as expressões regulares já são um "enrosco" só e a teoria matemática só iria piorar ainda mais as coisas. Pode ficar tranquilo, a matemática ficará de fora Quem usa (ou deveria usar) expressões regulares?Todos os programadores que usam linguagens com suporte a expressões regulares, ou seja, que possuam "motores" de expressões regulares deveriam conhecer as ditas cujas. As linguagens mais conhecidas que possuem motores regex são Para que servem as expressões regulares?Quando comecei a me interessar por este assunto, minha primeira dificuldade foi entender porque este troço foi inventado. Depois de ler uma porção de explicações, algumas extremamente complicadas, outras um bocado herméticas e outras ainda um tanto infantis, finalmente caiu a ficha: Expressões Regulares servem para procurar e comparar CARACTERES. Pode parecer bobagem, mas as regex servem exatamente e tão somente para isto - possibilitam localizar CARACTERES e nada mais! Podem ser caracteres isolados ou uma porção deles dispostos numa determinada ordem, mas sempre caracteres (não é à toa que usei o negrito duas vezes). Os caracteres costumam ser chamados de letras, o que não é errado. Acontece que as letras não são os únicos caracteres que existem. Por exemplo, se eu colocar num texto qualquer que "uma dúzia é igual a 12", o número 12 é composto por dois algarismos que também são caracteres válidos porque, assim como as letras, são símbolos que expressam uma idéia e que compõem o texto - não estão sendo usados como valor de uma variável ou para realizar um cálculo matemático. Resumindo a história: se eu quiser procurar um valor com uma regex, vou quebrar a cara, mas, se quiser procurar como se escreve 12 usando algarismos como caracteres... tudo bem (e dá-lhe negrito!) Acontece que os textos possuem mais do que apenas letras e algarismos. As palavras são separadas por espaços, as sentanças são separadas por vírgulas e as frases são separadas por pontos. Além disto existem hífens, ponto e vírgula, sublinhado, etc e tal. Tudo isto são convenções estabelecidas (mas nem sempre obedecidas Que vantagem Maria leva?Os programadores de platão que não usam expressões regulares já devem estar se perguntando: e daí, uso uma linguagem de programação que possui um caminhão de funções que lidam com strings. São fáceis de entender, fáceis de aplicar e o resultado é exatamente o que preciso. E eu com as tais de expressões regulares? Pra mim isto não é nenhuma novidade. Antes de conhecer os monstrinhos regex, também pensava do mesmo modo até descobrir o seguinte: as funções simples de strings e as expressões regulares fazem a mesma coisa, com um pequeno detalhe. Usar as funções convencionais que lidam com strings dá um trabalho do cão, incha o código, dificulta a depuração e a manutenção e penaliza o interpretador do código. Por outro lado, o motor regex foi projetado para fazer exclusivamente o trabalho de procura e localização, foi otimizado para dar rendimento máximo e, na maioria das vezes, precisa apenas UMA LINHA de instrução. Ah! Aí a coisa pegou pro meu lado e fiquei toda animada! Já que este texto introdutório virou meu muro de lamentações, agora vem a parte dolorosa: o grande problema (que acabei descobrindo não ser só meu) é "explicar" o que pretendemos para o motor regex. O bacaninha "fala" uma língua estranha pra caramba e, mais do que isto, não podemos "conversar" com ele diretamente. Agora me conte uma coisa: depois desta introdução, você está querendo desistir? Eu não desisti, e me dei bem porque resolvi APRENDER FAZENDO! Talvez isto sirva de estímulo, ou talvez o pequeno exemplo a seguir dê uma noção do que você também pode aprender pondo a mão na massa. Um exemplo do que você pode conseguirImagine o seguinte cenário: temos um texto de alguns megabytes e queremos encontrar um endereço de e-mail referido em algum ponto do dito cujo. Podemos ler o texto até encontrá-lo - o que, além de chato, dá um baita de um trabalho - ou submeter o megatexto a uma expressãozinha regex do tipo
\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b
Fácil, não é mesmo? Bem, é fácil se conseguirmos entender esta sopa de letrinhas e como se monta uma regex deste tipo. Volto a dizer: quando esbarrei nas regex pela primeira vez achei que era coisa de maluco e que este tal de motor era uma insanidade. Com o tempo, e depois de bater muito a cabeça, comecei a gostar deste monstrinho e hoje não consigo viver sem ele Por exemplo, a regex para a checagem de um endereço de email fica assim (ponha o cursor do mouse numa parte da regex ou numa das linhas de explicação): \b[A-Z0-9._%-]++@[A-Z0-9._%-]+\.[A-Z]{2,4}\b
Tem mais pessoal. Veja os outros tutoriais com exemplos práticos. |
| Última atualização ( Ter, 21.08.2007 18:46 ) |