Stanley Alves email: stanleymsn@gmail.com skype: stanleymsn O que raios so as expresses regulares ? Definio uma composio de smbolos, caracteres com funes especiais, que, agrupados entre si e com caracteres literais, formam uma seqncia, uma expresso. Essa expresso interpretada como uma regra, que indicar sucesso se uma entrada de dados qualquer casar com essa regra, ou seja, obedecer exatamente a todas as suas condies. No entendi po*** nenhuma !!! >-( Definio Resumidamente falando uma expresso regular um mtodo formal de se especificar um padro de texto. Melhorou, mas ainda t confunso. Definio Como o brinquedo LEGO Como um quebra-cabea Como um jogo Como o alfabeto Acima de tudo, assim como um sorvete no domingo ensolarado, uma expresso regular : Divertida! Entendi, mas o que voc quiz dizer com divertida? T louco? Todos aqueles smbolos estranhos... "Vamos destruir aquilo que no entendemos!" Vem c, mais de onde surgiram essas tais expresses regulares, tem algo a ver com expresses matemticas? Histria 1943 => tese de dois neurologistas, publicaram um estudo sobre o funcionamento dos neuronios; 1968 => primeiro contato das ERs com a computacao, atraves do editor qed; 1986 => criao do pacote regex em C (de graca); Apesar de esse assunto ser antigo, o que vamos ver aqui basicamente o mesmo que um estudante veria h 15 anos atrs. um conceito consistente, que no sofre alteraes com o passar do tempo. Curiosidade Terminologia E se eu te disser que "ERs so metacaracteres que casam um padro"? No entendeu? Metacaracteres so smbolos que possuem funes especiais. O termo casar ("match") s vezes pode assustar um leitor meio distrado. como em um caixa 24 horas... Terminologia Tambm temos o padro ("pattern"), que nosso objetivo quando fazemos uma ER: casar um padro. Esse padro pode ser uma palavra, vrias, uma linha vazia, um nmero, ou seja, o que quer que precise ser encontrado pela nossa ER. Para que servem? Exemplo Sistema de login 05:15 ernesto 08:39 ricardo 10:32 patricia 14:59 gabriel 16:27 carla 22:23 marcelo Exemplo Como fazer para buscar automaticamente apenas os usurios que acessaram o sistema no perodo da tarde (meio-dia s seis)? Exemplo Voc tem vrias opes: - desde procurar uma a uma manualmente; - fazer um programa que compare os primeiros caracteres de cada linha; - mas falando de algo prtico e rpido, que no exija conhecimentos de programao, a ER simplesmente ^1[2-8].+ O que significa essa sopa de letrinhas? Os Metacaracteres Ento, para j matar sua curiosidade, aqui esto os to falados metacaracteres-padro que sero nossos personagens dos prximos slides: . ? * + ^ $ | [ ] { } ( ) \. E a, sentiu um frio na barriga? Os Metacaracteres Cada simbolozinho desses tem sua funo especfica, que pode mudar dependendo do contexto no qual est inserido, e podemos agreg-los uns com os outros, combinando suas funes e fazendo construes mais complexas. Vamos dar nomes aos bois meta mnemnico ------------------------------ . ponto [] lista [^] lista negada ? opcional * asterisco + mais {} chaves meta mnemnico ------------------------------ ^ circunflexo $ cifro \b borda \ escape | ou () grupo \1 retrovisor Separando por funo => Representantes meta mnemnico funo --------------------------------------------------------------- . ponto um caractere qualquer [...] lista lista de caracteres permitidos [^...] lista negada lista de caracteres proibidos => Quantificadores meta mnemnico funo --------------------------------------------------------------- ? opcional zero ou um * asterisco zero, um ou mais + mais um ou mais {n,m} chaves de n at m => ncoras meta mnemnico funo --------------------------------------------------------------- ^ circunflexo incio da linha $ cifro fim da linha \b borda incio ou fim de palavra => Outros meta mnemnico funo --------------------------------------------------------------- \c escape torna literal o caractere c | ou ou um ou outro (...) grupo delimita um grupo \1...\9retrovisor texto casado nos grupos 1...9 Aaaah, ? O '*' eu j uso na linha de comando! Metacaracteres tipo Representante Ponto: o necessitado . O ponto casa com qualquer coisa. O ponto casa com o ponto. O ponto um curinga para casar um caractere. Ponto: o necessitado . ER: fala. "Olha, com vocs me pressionando a fala no vai sair natural. Eu no consigo me concentrar na minha fala. Alis, isso um falatrio, pois nunca vi um comercial com tantas falas assim. Vou me queixar com o problemasnafala@ medicos.com.br" Lista: a exigente [...] A lista casa com quem ela conhece e tem suas prprias regras. Dentro da lista, todo mundo normal. Dentro da lista, trao indica intervalo. Um - literal deve ser o ltimo item da lista. Um ] literal deve ser o primeiro item da lista. Os intervalos respeitam a tabela ASCII (no use A-z). [:classes POSIX:] incluem acentuao, A-Z no. Classes POSIX classe POSIX similar significa --------------------------------------------- [:upper:] [A-Z] letras maisculas [:lower:] [a-z] letras minsculas [:alpha:] [A-Za-z] maisculas/minsculas [:alnum:] [A-Za-z0-9] letras e nmeros [:digit:] [0-9] nmeros [:xdigit:] [0-9A-Fa-f] nmeros hexadecimais classe POSIX similar significa --------------------------------------------- [:punct:] [.,!?:...] sinais de pontuao [:blank:] [ \t] espao e TAB [:space:] [ \t\n\r\f\v]caracteres brancos [:cntrl:] - caracteres de controle [:graph:] [^ \t\n\r\f\v] caracteres imprimveis [:print:] [^\t\n\r\f\v] imprimveis e o espao Lista negada: a experiente [^...] Uma lista negada segue todas as regras de uma lista normal. Um ^ literal no deve ser o primeiro item da lista. [:classes POSIX:] podem ser negadas. A lista negada sempre deve casar algo. Metacaracteres tipo Quantificador Opcional: o opcional ? O opcional opcional. O opcional til para procurar palavras no singular e plural. Podemos tornar opcionais caracteres e metacaracteres. Asterisco: o tanto-faz * O asterisco repete em qualquer quantidade. Quantificadores so gulosos. O curinga .* o tudo e o nada, qualquer coisa. Mais: o tem-que-ter + O mais repete em qualquer quantidade, pelo menos uma vez. O mais igual ao asterisco, s que mais exigente. Chaves: o controle {n,m} Chaves so precisas. Voc pode especificar um nmero exato, um mnimo, um mximo, ou uma faixa numrica. As chaves simulam o *, o + e a ?. As chaves no so o Chaves. Metacaracteres tipo ncora Circunflexo: o incio ^ Circunflexo um nome chato, porm chapeuzinho legal. Serve para procurar palavras no comeo da linha. S especial no comeo da ER. Cifro: o fim $ Serve para procurar palavras no fim da linha. S especial no final da ER. cifro e no dlar. Pausa para pensar (Uffa) ^$ Um comeo de linha seguido de... mmmmmm... um fim de linha? Sim, e o que isso significa? Ah! Uma linha vazia! Borda: a limtrofe \b A borda marca os limites de uma palavra O conceito "palavra" engloba letras, nmeros e o sublinhado A borda til para casar palavras exatas e no parciais Outros Metacaracteres Escape: a criptonita \ O escape escapa um metacaractere, tirando seu poder. \* = [*] = asterisco literal. O escape escapa o escape, escapando-se a si prprio simultaneamente. Ou: o alternativo | O ou indica alternativas. Lista para um caractere, ou para vrios. O grupo multiplica o poder do ou. Grupo: o pop (...) Grupos servem para agrupar. Grupos so muito poderosos. Grupos podem conter grupos. Grupos so quantificveis. Retrovisor: o saudosista \1 ... \9 O retrovisor s funciona se usado com o grupo. O retrovisor serve para procurar palavras repetidas. Numeram-se retrovisores contando os grupos da esquerda para a direita. Temos no mximo 9 retrovisores por ER. Mais sobre os metacaracteres Quantificadores: gulosos x no gulosos gulosos --------------------- a.* aaaaa a.+ aaaaa a.? aa a.{1,3} aaaa no-gulosos --------------------- a.*? a a.+? aa a.?? a a.{1,3}? aa Metacaracteres tipo barra-letra b-l nome traduo --------------------------------------------- \a alert alerta (bipe) \b backspace caract. Backspace \e escape caractere Esc \f form feed alimentao \n newline linha nova \r carriage ret retorno de carro \t htab tabulao horizontal \v vtab tabulao vertical b-l POSIX equiv. mnemnico ------------------------------------------- \d [[:digit:]] dgito \D [^[:digit:]] no-dgito \w [[:alnum:]_] palavra \W [^[:alnum:]_]no-palavra \s [[:space:]] branco \S [^[:space:]] no-branco Metacaracteres modernosos (?#texto) Inserir comentrios dentro da expresso regular (?:ER) Serve para desconsiderar um grupo na contagem de grupos capturados (?=ER) No casa caracteres na posio atual, mas d uma "espiada" adiante e caso a ER embutida case, retorna sucesso. como s apostar na loteria se voc j souber o resultado. Por exemplo a ER Homer (?=Simpson) s casar o Homer se for seguido de Simpson. Mas o sobrenome no faz parte do trecho casado, serviu apenas para checagem. (?!ER) o contrrio do anterior, s casando um trecho se este no for seguido da ER embutida. Ento Homer (?!morreu) casa o Homer do texto Homer comeu, mas no do Homer morreu. (?<=ER) e (?<!ER) Estes dois so complementares aos dois anteriores, a diferena que em vez de espiar para frente, eles espiam para trs (note o < apontando para a esquerda). Ento (?<!Barney) Simpson casar Simpson em Homer Simpson, mas no em Barney Simpson. Exemplo Real Emitir um relatrio de todos os registros da tabelaX em ordem alfabtica. select nome from tabelaX order by nome ASC Exemplo Real 1.1.1 Valor A 4.4 3 Valor D 222 Valor E 1-2-4 Valor B Exemplo Real select substring(nome from '(?![\d\s\-\.]).+') from tabelaX order by substring(nome from '(?![\d\s\-\.]).+') asc; FIM !!! Agora voc esta pronto para produzir e usar suas prprias expresses regulares para os mais diversos casos e problemas. RegEx: (Dvidas|Crticas|Sugestes) Referncias http://aurelio.net/regex/guia/ http://rubular.com/ http://www.regexr.com/ http://www.nerdson.com