3308 registros
0 hoje
12 nesta semana
45 neste mês![]() | 73% | Brasil (49407) |
![]() | 5% | Portugal (3211) |
![]() | 3% | EUA (2254) |
![]() | 0% | Rússia (265) |
![]() | 0% | Holanda (240) |
| Hoje: | 283 |
| Ontem: | 2619 |
| No mês: | 42079 |
| Mês passado: | 25815 |
| Total: | 67894 |
| Recorde: | 3037 |
| No dia: | 04.03.10 |
| Leituras hoje: | 22139 |
| Leituras Total: | 291567 |
| Bots hoje: | 194 |
| Dados desde: | 16.02.2010 |
|
Sex 17 Ago 2007 17: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 Perl, PHP, Python, .NET e a plataforma Java. Infelizmente (e para variar) não existe um padrão estabelecido, o que significa que o modo de chamar uma regex varia de acordo com o ambiente de programação. No conjunto destes tutoriais vou usar a sintaxe da biblioteca PCRE. PCRE vem de Perl Compatible Regular Expressions e é uma biblioteca de código aberto escrita em C por Phillip Hazel. Este é, de longe, o melhor conjunto de expressões regulares disponível no momento. 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.04.2009 20:28 ) |