1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Seminário: Correspondência de padrão com expressões regulares] 2 00:00:02,000 --> 00:00:04,000 [John Mussman-Harvard University] 3 00:00:04,000 --> 00:00:07,220 [Isto é CS50.-CS50.TV] 4 00:00:07,780 --> 00:00:11,610 Okay. Bem-vindos todos. Isto é CS50 2012. 5 00:00:11,780 --> 00:00:16,610 Meu nome é João, e vou falar hoje sobre expressões regulares. 6 00:00:16,610 --> 00:00:22,530 As expressões regulares é essencialmente uma ferramenta, mas também por vezes utilizado 7 00:00:22,530 --> 00:00:28,650 em código ativamente para corresponder essencialmente padrões e cadeias. 8 00:00:28,650 --> 00:00:33,800 Então aqui está uma história em quadrinhos web de xkcd. 9 00:00:34,440 --> 00:00:42,370 Neste quadrinhos há um mistério de assassinato onde o assassino tem 10 00:00:42,370 --> 00:00:47,860 seguido alguém em férias, e os protagonistas têm de 11 00:00:47,860 --> 00:00:52,500 pesquisar através de 200 megabytes de e-mails à procura de um endereço. 12 00:00:52,500 --> 00:00:56,090 E eles estão prestes a desistir quando alguém que conhece expressões regulares - 13 00:00:56,090 --> 00:01:00,550 presumivelmente um super-herói - desce rapidamente e escreve algum código 14 00:01:00,550 --> 00:01:02,970 e resolve o mistério do assassinato. 15 00:01:02,970 --> 00:01:07,370 Assim, presumivelmente, que vai ser algo que você estará habilitado a fazer 16 00:01:07,370 --> 00:01:09,370 após este seminário. 17 00:01:09,370 --> 00:01:12,250 Nós apenas estamos indo para fornecer uma introdução concisa à linguagem 18 00:01:12,250 --> 00:01:16,770 e dar-lhe o suficiente recursos para ir atrás de mais recursos em seu próprio país. 19 00:01:17,680 --> 00:01:21,700 >> Assim, expressões regulares olhar basicamente assim. 20 00:01:22,930 --> 00:01:25,550 Esta é uma expressão regular em Ruby. 21 00:01:25,550 --> 00:01:29,280 Não é muito diferente entre as línguas. 22 00:01:29,690 --> 00:01:37,630 Temos apenas em barras para começar e marcar a expressão regular em Ruby. 23 00:01:37,630 --> 00:01:42,880 E esta é uma expressão regular para procurar no e-mail padrão de endereço. 24 00:01:42,880 --> 00:01:49,160 Assim, vemos no primeiro bit olha para qualquer caractere alfanumérico. 25 00:01:50,500 --> 00:01:54,880 Isso é porque os endereços de e-mail, muitas vezes tem que começar com um caractere alfabético. 26 00:01:55,460 --> 00:01:59,330 E então qualquer caractere especial, seguida pelo símbolo @. 27 00:01:59,330 --> 00:02:03,260 E, em seguida, a mesma coisa para o nome de domínio. 28 00:02:03,260 --> 00:02:10,030 E, em seguida, entre 2 e 4 personagens para olhar para o. Com,. Net, e assim por diante. 29 00:02:10,850 --> 00:02:13,200 Então esse é um outro exemplo de expressão regular. 30 00:02:13,200 --> 00:02:17,270 Assim, expressões regulares são protocolos para encontrar padrões em texto. 31 00:02:17,270 --> 00:02:21,130 Eles fazem comparações, seleções, e substituições. 32 00:02:21,690 --> 00:02:27,970 Assim, um terceiro exemplo é encontrar todos os números de telefones que terminam em 54 em um diretório. 33 00:02:27,970 --> 00:02:34,360 Portanto, antes de David rasga o diretório CS50 poderíamos procurar 34 00:02:34,360 --> 00:02:40,450 um padrão onde temos parênteses, em seguida, três números depois acabam parênteses, 35 00:02:40,450 --> 00:02:44,070 Mais 3 números, um traço, dois números e, em seguida, 54. 36 00:02:44,070 --> 00:02:48,310 E isso seria essencialmente como podemos chegar a uma expressão regular para procurar isso. 37 00:02:49,150 --> 00:02:52,960 >> Portanto, há - nós temos feito algumas coisas em CS50 que são um pouco como 38 00:02:52,960 --> 00:02:59,740 expressões regulares, de modo que - por exemplo - no arquivo dictionary.C 39 00:02:59,740 --> 00:03:04,720 para a verificação ortográfica conjunto de problemas que você pode ter usado fscanf 40 00:03:04,720 --> 00:03:07,930 para ler em uma palavra do dicionário. 41 00:03:07,930 --> 00:03:16,240 E você pode ver a 45s percentual está à procura de uma string de 45 caracteres. 42 00:03:16,240 --> 00:03:20,020 Por isso, é um pouco como uma expressão regular rudimentar. 43 00:03:21,150 --> 00:03:26,060 E você pode ter todos os 45 caracteres que cabem a conta lá 44 00:03:26,060 --> 00:03:28,080 e escolher aqueles acima. 45 00:03:28,080 --> 00:03:33,480 E, em seguida, o segundo exemplo no mais recente problema de programação web 46 00:03:33,480 --> 00:03:40,760 definido no código distro para php nós realmente temos uma expressão regular simples. 47 00:03:40,760 --> 00:03:46,790 E este é simplesmente olhando para verificar se a página web que é passado em 48 00:03:46,790 --> 00:03:51,940 corresponde ou de entrar e sair registar. PHP. 49 00:03:52,220 --> 00:03:57,910 E, em seguida, retornar verdadeiro ou falso com base nessa expressão correspondência regular. 50 00:03:59,400 --> 00:04:01,740 >> Então, quando você usar a expressão regular? 51 00:04:01,740 --> 00:04:04,820 Por que você está aqui hoje? 52 00:04:05,330 --> 00:04:08,480 Então você não quer usar a expressão regular, quando há algo que 53 00:04:08,480 --> 00:04:11,640 faz o trabalho para você mesmo mais facilmente. 54 00:04:11,640 --> 00:04:15,510 Então, XML e HTML são realmente muito complicado 55 00:04:15,510 --> 00:04:18,480 escrever expressões regulares para, como veremos daqui a pouco. 56 00:04:19,110 --> 00:04:23,280 Portanto, há analisadores dedicados para essas línguas. 57 00:04:24,170 --> 00:04:30,060 Você também precisa estar bem com o trade offs e precisão com freqüência. 58 00:04:30,060 --> 00:04:36,220 Se você está tentando - por isso vimos uma expressão regular para um endereço de e-mail, 59 00:04:37,370 --> 00:04:42,590 mas disse que queria um endereço de e-mail específico e, gradualmente, o 60 00:04:42,590 --> 00:04:48,570 expressão regular pode tornar-se mais complexa à medida que se tornou mais preciso. 61 00:04:49,580 --> 00:04:52,260 Então, isso seria um trade off. 62 00:04:52,260 --> 00:04:55,330 Você tem que ter certeza de que você está fazendo bem com a expressão regular. 63 00:04:55,330 --> 00:04:57,920 Se você sabe exatamente o que você está procurando, pode fazer mais sentido 64 00:04:57,920 --> 00:05:02,070 para colocar no tempo e escrever um parser mais eficaz. 65 00:05:02,070 --> 00:05:06,980 E, finalmente, há uma questão histórica com a regularidade 66 00:05:06,980 --> 00:05:08,940 de expressões e linguagens. 67 00:05:08,940 --> 00:05:12,960 As expressões regulares são realmente muito mais poderoso do que 68 00:05:12,960 --> 00:05:16,450 expressões regulares por dizer em um sentido formal. 69 00:05:17,130 --> 00:05:20,150 >> Então, eu não quero ir longe demais na teoria formal, 70 00:05:20,150 --> 00:05:24,000 mas a maioria das línguas que código na verdade não são regulares. 71 00:05:24,000 --> 00:05:29,110 E é por isso que as expressões regulares, por vezes, não são considerados todos os que segura. 72 00:05:29,670 --> 00:05:33,150 Então, basicamente, existe uma hierarquia de Chomsky línguas, 73 00:05:33,150 --> 00:05:38,400 e expressões regulares são construídas utilizando-se união, concatenação, 74 00:05:38,400 --> 00:05:41,810 ea operação estrela Kleene que veremos em poucos minutos. 75 00:05:43,130 --> 00:05:48,860 Se você está interessado em teoria, há muitas coisas acontecendo por lá sob o capô. 76 00:05:50,360 --> 00:05:55,880 >> Assim, uma breve história - apenas para o contexto aqui - conjuntos regulares veio 77 00:05:55,880 --> 00:05:59,580 na década de 1950, e depois tivemos editores simples que 78 00:05:59,580 --> 00:06:03,300 incorporou as expressões regulares - apenas procurando por strings. 79 00:06:03,570 --> 00:06:09,110 Grep - que é uma ferramenta de linha de comando - foi um dos primeiros 80 00:06:09,110 --> 00:06:14,160 ferramentas muito populares que incorporou as expressões regulares na década de 1960. 81 00:06:14,160 --> 00:06:20,560 Nos anos 80, Perl foi construído - é uma linguagem de programação que 82 00:06:20,560 --> 00:06:24,110 incorpora expressões regulares muito proeminente. 83 00:06:24,550 --> 00:06:30,130 E então, mais recentemente, tivemos Perl expressões regulares compatíveis 84 00:06:30,130 --> 00:06:35,870 protocolos, basicamente, em outras línguas que usam muito a mesma sintaxe. 85 00:06:36,630 --> 00:06:39,840 Claro que o acontecimento mais importante foi em 2008 86 00:06:39,840 --> 00:06:43,040 onde houve o primeiro Dia Nacional de expressões regulares, 87 00:06:43,040 --> 00:06:47,350 que eu acredito que é 01 de junho, se você quiser comemorar. 88 00:06:48,430 --> 00:06:50,840 >> Mais uma vez, um pouco mais a teoria aqui. 89 00:06:52,180 --> 00:06:55,320 Portanto, há algumas maneiras diferentes de construir expressões regulares. 90 00:06:55,950 --> 00:07:02,050 Uma maneira simples é construir a expressão que você está indo para 91 00:07:02,050 --> 00:07:07,500 executado na seqüência de interpretar - basicamente construir um mini-programa pouco que 92 00:07:07,500 --> 00:07:11,870 vai analisar pedaços de uma corda e ver: "Ah, isso se encaixa a expressão regular ou não?" 93 00:07:12,250 --> 00:07:14,250 E, em seguida, executar isso. 94 00:07:14,250 --> 00:07:17,300 Então se você tem uma pequena expressão regular, este é, provavelmente, 95 00:07:17,300 --> 00:07:19,380 a forma mais eficiente de fazê-lo. 96 00:07:20,090 --> 00:07:25,420 E então se você - outra opção é manter a reconstruir o 97 00:07:25,420 --> 00:07:30,260 expressão que você vá, e que é a possibilidade de simulação. 98 00:07:30,440 --> 00:07:37,690 E essas primeiras tentativas de algoritmos de expressões regulares foram 99 00:07:37,690 --> 00:07:44,330 relativamente simples e relativamente rápido, mas não tem muita flexibilidade. 100 00:07:44,330 --> 00:07:47,500 Então, para fazer ainda algumas das coisas que nós estamos indo olhar 101 00:07:47,500 --> 00:07:52,860 hoje nós tivemos que fazer expressão regular mais complexa 102 00:07:52,860 --> 00:07:56,650 implementações que são potencialmente muito mais lento, de modo que é algo a ter em mente 103 00:07:57,510 --> 00:08:02,920 Há também uma expressão regular de negação variedade ataque 104 00:08:02,920 --> 00:08:08,330 que exploram o potencial para essas implementações mais recentes do 105 00:08:08,330 --> 00:08:10,930 expressões regulares para se tornar muito complexo. 106 00:08:11,570 --> 00:08:15,650 E em grande parte da mesma forma que vimos nos ataques de estouro de buffer, 107 00:08:15,650 --> 00:08:21,610 você tem ataques de que o trabalho por fazer loops recursiva que 108 00:08:21,610 --> 00:08:24,400 superado a capacidade de memória. 109 00:08:24,780 --> 00:08:29,540 E pelo jeito Regexen é um dos plurais oficiais da expressão regular 110 00:08:29,540 --> 00:08:32,890 por analogia com bois na anglo-saxão. 111 00:08:33,500 --> 00:08:40,169 >> Ok, então a biblioteca Python que muitos de vocês aqui em pessoa tem Macs, 112 00:08:40,169 --> 00:08:43,860 assim você pode realmente conseguir isso na sua tela. 113 00:08:43,860 --> 00:08:47,480 As expressões regulares são construídas em Python. 114 00:08:48,070 --> 00:08:53,020 E assim Python é pré-carregado em Macs e também disponível online neste link. 115 00:08:53,770 --> 00:08:57,350 Então, se você está assistindo você pode pausar e certifique-se que você tem Python 116 00:08:58,080 --> 00:09:00,170 como jogamos aqui. 117 00:09:00,780 --> 00:09:06,420 Existe um manual online, então se você apenas digitar Python em seu computador 118 00:09:06,420 --> 00:09:10,500 você vai ver que a versão surge no terminal. 119 00:09:11,070 --> 00:09:17,720 Então, eu forneci um link para o manual para a versão 2 do Python, bem como uma folha de fraude. 120 00:09:17,720 --> 00:09:23,100 Há uma versão 3 do Python, mas o seu Mac não necessariamente 121 00:09:23,100 --> 00:09:25,130 vêm com esse pré-carregado. 122 00:09:25,130 --> 00:09:27,360 Então, não é muito diferente. 123 00:09:27,360 --> 00:09:33,270 Ok, então algumas noções básicas de uso de expressões regulares em Python. 124 00:09:34,080 --> 00:09:42,650 >> Então, aqui eu usei uma expressão muito simples, então eu fiz Python import re 125 00:09:43,750 --> 00:09:47,070 e, em seguida, levou o resultado de re.search. 126 00:09:47,070 --> 00:09:49,910 E a busca leva dois argumentos. 127 00:09:49,910 --> 00:09:56,040 A primeira é a expressão regular, e o segundo é o texto 128 00:09:56,040 --> 00:09:58,290 ou seqüência que você deseja analisar. 129 00:09:58,290 --> 00:10:01,210 E então eu imprimi o result.group. 130 00:10:01,580 --> 00:10:05,860 Então, essas são as duas funções básicas que vamos ver hoje 131 00:10:06,790 --> 00:10:10,170 em aprender sobre expressões regulares. 132 00:10:10,170 --> 00:10:12,880 Então, basta quebrar esta expressão regular aqui 133 00:10:12,880 --> 00:10:21,770 h e, em seguida, \ w e m so \ w apenas aceita qualquer caractere alfabético lá. 134 00:10:21,850 --> 00:10:26,820 Então, aqui estamos à procura de um "h" e, em seguida, um outro caractere alfabético 135 00:10:26,820 --> 00:10:30,060 e, em seguida, m, então aqui que iria coincidir com presunto 136 00:10:30,060 --> 00:10:34,480 em "Abraham Lincoln e sanduíches de presunto." 137 00:10:35,040 --> 00:10:37,150 Este é o resultado do referido grupo. 138 00:10:37,680 --> 00:10:43,130 Outra coisa que podemos fazer é usar nossas cordas antes do texto em Python. 139 00:10:43,130 --> 00:10:46,220 Então eu acho que eu vou ir em frente e puxe que até aqui. 140 00:10:46,220 --> 00:10:49,210 Python import re. 141 00:10:50,070 --> 00:10:54,000 E se eu fosse fazer a mesma coisa - digamos texto é, 142 00:10:55,390 --> 00:11:00,800 "Abraham", vamos fazer zoom in - lá vamos nós. 143 00:11:01,610 --> 00:11:06,430 O texto é: "Abraão come presunto." 144 00:11:07,460 --> 00:11:15,260 Ok, e em seguida, resultado = re.search. 145 00:11:16,260 --> 00:11:22,020 E então nossa expressão pode ser h, e depois vou fazer dot m. 146 00:11:22,020 --> 00:11:26,280 Então dot só leva qualquer caractere que não é uma nova linha, incluindo números, 147 00:11:26,280 --> 00:11:28,650 sinais percentuais, qualquer coisa assim. 148 00:11:28,650 --> 00:11:38,030 E então o texto - crescimento - e, em seguida, result.group--yeah. 149 00:11:38,030 --> 00:11:41,820 Então, isso é apenas a forma de implementar a funcionalidade básica aqui. 150 00:11:42,300 --> 00:11:55,110 Se tivéssemos um anel texto que - esse texto louco - incluído dizer muitas barras invertidas 151 00:11:55,110 --> 00:12:01,180 e cordas dentro e as coisas que poderia parecer seqüências de escape, 152 00:12:01,180 --> 00:12:08,480 então nós provavelmente vai querer usar a entrada de texto simples para se certificar de que é aceito. 153 00:12:08,480 --> 00:12:14,120 E isso só se parece com isso. 154 00:12:14,120 --> 00:12:17,810 Então, se estivéssemos olhando para cada um deles lá, não devemos achar nada. 155 00:12:19,070 --> 00:12:21,680 Mas é assim que você executá-lo, pouco antes da seqüência de 156 00:12:21,680 --> 00:12:24,990 a expressão regular que você colocar a letra r. 157 00:12:26,150 --> 00:12:30,260 >> Ok, então vamos continuar. 158 00:12:30,260 --> 00:12:33,730 Tudo bem - então vamos olhar para um par de padrões repetitivos aqui. 159 00:12:34,750 --> 00:12:39,150 Então, uma coisa que você quer fazer é repetir as coisas 160 00:12:40,040 --> 00:12:42,480 como você está procurando através de texto. 161 00:12:42,480 --> 00:12:48,300 Então, para fazer um seguido por qualquer número de b - você faz ab *. 162 00:12:48,630 --> 00:12:51,620 E depois há uma série de outras regras também. 163 00:12:51,620 --> 00:12:54,380 E você pode olhar todos esses up, vou apenas correr por alguns dos 164 00:12:54,380 --> 00:12:57,630 mais comumente usado queridos. 165 00:12:57,630 --> 00:13:03,920 Assim ab + é seguido por um qualquer N superior a 0 de b. 166 00:13:04,510 --> 00:13:08,000 ab? é seguido por 0 ou 1 de b. 167 00:13:09,190 --> 00:13:18,580 aB N {} é um seguido por N de b e, em seguida assim por diante. 168 00:13:18,580 --> 00:13:22,820 Se você tiver dois números nas chaves que você está especificando um intervalo 169 00:13:23,300 --> 00:13:25,440 que pode ser, possivelmente combinados. 170 00:13:26,390 --> 00:13:30,420 Então, vamos olhar mais para alguns padrões repetitivos em um minuto. 171 00:13:31,960 --> 00:13:42,300 Então, duas coisas para manter em mente quando se utiliza estas ferramentas padrão de harmonização aqui. 172 00:13:42,300 --> 00:13:52,120 Então, dizer que nós queremos olhar para o hm de "Abraham Lincoln faz sanduíches de presunto." 173 00:13:52,120 --> 00:13:55,230 Então eu mudei o nome de Abraham Lincoln a Abraão. 174 00:13:55,230 --> 00:14:00,290 E agora nós estamos procurando o que é retornado por esta função de pesquisa, 175 00:14:00,290 --> 00:14:03,270 e só retorna presunto neste caso. 176 00:14:03,620 --> 00:14:08,080 E ele faz isso porque busca apenas naturalmente leva mais à esquerda fila. 177 00:14:08,080 --> 00:14:12,130 E todas as expressões regulares, a menos que você especifique o contrário vai fazer isso. 178 00:14:12,830 --> 00:14:18,880 Se quiséssemos encontrar tudo o que existe é uma função para isso - encontrar todos. 179 00:14:18,880 --> 00:14:35,100 De modo que só poderia parecer all = re.findall ('h.m', texto) 180 00:14:35,100 --> 00:14:44,540 e, em seguida all.group (). 181 00:14:44,540 --> 00:14:51,040 Todos produz tanto fiambre e presunto, neste caso ambas as cordas em Abraham cada presunto. 182 00:14:51,610 --> 00:14:55,110 Então, isso é uma outra opção. 183 00:14:56,250 --> 00:15:06,940 >> Grande. A outra coisa a ter em mente é que as expressões regulares tirar o maior intuitivamente. 184 00:15:06,940 --> 00:15:09,520 Vejamos este exemplo. 185 00:15:10,200 --> 00:15:16,070 Fizemos isso mais à esquerda pesquisa aqui, e então eu tentei uma pesquisa maior 186 00:15:16,070 --> 00:15:18,800 usando o operador estrela de Kleene. 187 00:15:18,800 --> 00:15:24,180 Assim, para "Abraham Lincoln faz sanduíches de presunto", e eu só tenho de volta 188 00:15:24,180 --> 00:15:26,280 m como resultado. 189 00:15:26,280 --> 00:15:31,670 A razão para esse erro era que eu poderia ter tomado qualquer número de 190 00:15:31,670 --> 00:15:36,140 h é porque eu não especificou nada para ir entre h e m. 191 00:15:36,140 --> 00:15:42,010 O único exemplo que não tinha m - os únicos exemplos lá com m nele 192 00:15:42,010 --> 00:15:46,220 e qualquer número de horas de foram apenas o barbante m. 193 00:15:46,490 --> 00:15:51,850 Então eu tentei de novo, eu disse: "Ok, vamos começar o maior grupo real aqui." 194 00:15:51,850 --> 00:15:59,670 E então eu fiz h. * M, de modo que apenas retorna qualquer número de caracteres entre h e m. 195 00:16:00,280 --> 00:16:02,950 E se você está apenas começando e pensando: "Oh, bem, bem, isso vai 196 00:16:02,950 --> 00:16:11,560 me ham ", ele realmente tem de tudo, desde o h em Abraham Lincoln 197 00:16:11,560 --> 00:16:13,690 todo o caminho até o final de presunto. 198 00:16:14,040 --> 00:16:18,110 É ganancioso, que vê h - tudo isso outro texto - m, 199 00:16:18,110 --> 00:16:21,280 e que é o que leva dentro 200 00:16:22,060 --> 00:16:27,480 Isto é particularmente notório - esta é uma característica que também pode 201 00:16:27,480 --> 00:16:30,670 especificar para não ser ganancioso usando outras funções. 202 00:16:31,480 --> 00:16:34,490 Mas isso é algo que temos que ter em mente especialmente 203 00:16:34,490 --> 00:16:38,720 quando se olha para o texto HTML, que é uma razão que 204 00:16:38,720 --> 00:16:41,500 expressões regulares são difíceis para HTML. 205 00:16:42,460 --> 00:16:46,310 Porque se você tem uma tag HTML aberta e, em seguida, um monte de coisas no meio 206 00:16:46,310 --> 00:16:49,820 e, em seguida, uma outra tag HTML fechada muito mais tarde no programa, 207 00:16:49,820 --> 00:16:55,420 que você acabou de comer um monte de seu código HTML, possivelmente por engano. 208 00:16:56,200 --> 00:17:01,840 >> Tudo bem - personagens tão mais especiais, como muitas outras línguas, 209 00:17:01,840 --> 00:17:04,780 que escapar usando a barra. 210 00:17:04,780 --> 00:17:10,329 Assim, podemos usar o ponto para especificar qualquer caractere, exceto para uma nova linha. 211 00:17:10,329 --> 00:17:14,550 Podemos usar a fuga w para especificar qualquer caractere alfabético. 212 00:17:14,550 --> 00:17:20,329 E por analogia fuga d para qualquer inteiro - personagem numérica. 213 00:17:20,630 --> 00:17:27,440 Podemos especificar - podemos usar colchetes para especificar expressões relacionadas. 214 00:17:27,440 --> 00:17:30,970 Então, isso seria aceitar a, b, ou c. 215 00:17:31,320 --> 00:17:37,000 E também pode especificar ou opções para a ou b. 216 00:17:37,000 --> 00:17:41,110 Por exemplo - se estivéssemos olhando para múltiplas possibilidades 217 00:17:41,110 --> 00:17:44,940 em suportes que podem utilizar o operador ou como em - 218 00:17:44,940 --> 00:17:52,480 então vamos voltar a este exemplo aqui. 219 00:17:53,000 --> 00:17:59,790 E agora vamos ter - vamos voltar a este exemplo aqui, e, em seguida, 220 00:17:59,790 --> 00:18:12,290 levar ae - de modo que este deve retornar - Eu acho que isso ainda é Abraão. 221 00:18:12,290 --> 00:18:17,410 Portanto, este - se fizermos tudo - grande. 222 00:18:17,410 --> 00:18:22,700 Por isso, vamos atualizar o texto aqui. 223 00:18:22,700 --> 00:18:34,690 "Abraham come presunto enquanto sua bainha - enquanto Hemming." Grande. 224 00:18:44,090 --> 00:18:47,330 Todos. Grande. Agora temos presunto, presunto, e bainha. 225 00:18:48,510 --> 00:18:59,370 Enquanto Hemming - enquanto cantarolava para ele - enquanto cantarolava a bainha dele. Grande. 226 00:19:00,350 --> 00:19:03,250 Mesma coisa. 227 00:19:03,820 --> 00:19:09,180 Agora, tudo retorna ainda apenas presunto, presunto, e hem sem pegar no zumbido ou a ele. 228 00:19:09,940 --> 00:19:22,600 Grande - assim que se quiséssemos olhar para qualquer um que - para que pudéssemos também fazer 229 00:19:23,510 --> 00:19:33,810 ele ou - vamos voltar a isso. 230 00:19:34,810 --> 00:19:45,760 Ok - então - tudo bem - em posições que você também pode usar o acento circunflexo ou o cifrão 231 00:19:45,760 --> 00:19:49,350 para especificar que você está procurando algo no início ou no final de uma string. 232 00:19:50,260 --> 00:19:52,260 Ou o início ou o fim de uma palavra. 233 00:19:52,400 --> 00:19:54,470 Essa é uma maneira de usar isso. 234 00:19:55,630 --> 00:20:01,160 >> Ok - então vamos brincar com um bloco um pouco maior de texto. 235 00:20:03,950 --> 00:20:08,310 Vamos dizer que esta linha aqui - esta declaração aqui. 236 00:20:08,310 --> 00:20:11,360 O poder de expressão normal é que eles podem especificar padrões 237 00:20:11,360 --> 00:20:13,390 não apenas fixa caracteres. 238 00:20:14,900 --> 00:20:18,790 Vamos fazer - vamos chamar este bloco. 239 00:20:22,400 --> 00:20:27,110 Então, vamos ler tudo isso dentro 240 00:20:28,890 --> 00:20:50,820 E depois tem a - vamos fazer tudo =, então o que são algumas coisas que poderia procurar aqui rentável? 241 00:20:50,820 --> 00:20:54,070 Poderíamos olhar para o ouvido expressão. 242 00:20:55,050 --> 00:21:01,520 Não é muito interessante. Que tal isso? Vamos ver o que acontece. 243 00:21:03,710 --> 00:21:05,710 Eu dei-lhe um problema. 244 00:21:06,380 --> 00:21:10,750 Assim, uma série de coisas antes de voltar e tudo mais. 245 00:21:10,750 --> 00:21:15,630 De modo que deve devolver tudo desde o início até a totalidade re talvez algumas vezes. 246 00:21:18,800 --> 00:21:21,970 E então aqui nós temos o poder das expressões regulares é que eles 247 00:21:21,970 --> 00:21:24,900 pode especificar padrões não apenas personagens estão aqui. 248 00:21:24,900 --> 00:21:28,510 Assim, todo o caminho até o re final, que começou com a mais esquerda e era ganancioso. 249 00:21:30,710 --> 00:21:32,710 Vamos ver - o que mais poderíamos procurar. 250 00:21:32,710 --> 00:21:39,860 Eu acho que uma coisa se você estivesse interessado em olhar para os pronomes ela e ele, 251 00:21:39,860 --> 00:21:44,600 você pode verificar para s igual a 0 ou 1 252 00:21:44,600 --> 00:21:49,710 ea expressão que ele, e que provavelmente não vai voltar - 253 00:21:49,710 --> 00:21:58,020 oh, eu acho que ele voltou, porque não estamos a olhar para o poder, naquele dia, aqui estão. 254 00:22:00,590 --> 00:22:06,270 Vamos tentar especificando que este tem que vir no início de alguma coisa. 255 00:22:06,640 --> 00:22:09,530 Vamos ver se isso cai. 256 00:22:09,530 --> 00:22:19,630 Assim, podemos fazer gordura, e não nós não temos nada, porque ela e ele 257 00:22:19,630 --> 00:22:22,870 não ocorrem nesta frase. 258 00:22:24,960 --> 00:22:30,410 Grande. Ok - então volta para o gato aqui. 259 00:22:30,410 --> 00:22:35,720 Padrões tão complexos é ferir o cérebro. 260 00:22:35,720 --> 00:22:40,500 Então é por isso que usar expressões regulares para evitar esses problemas. 261 00:22:40,820 --> 00:22:43,520 >> Então, aqui estão alguns outros modos úteis que você pode brincar. 262 00:22:43,520 --> 00:22:50,290 Olhamos para pesquisa de hoje, mas você também pode usar o jogo, split, findall e grupos. 263 00:22:50,290 --> 00:22:53,970 Então, outras coisas legais que você pode fazer com expressões regulares, além de apenas 264 00:22:53,970 --> 00:22:58,870 procurando por padrões está tomando um padrão e mantendo todos os jogos - 265 00:22:58,870 --> 00:23:02,530 suas variáveis ​​- e então usar aqueles em seu código mais tarde. 266 00:23:02,850 --> 00:23:05,980 Isso pode ser bastante útil. Outras coisas podem estar contando. 267 00:23:05,980 --> 00:23:11,720 Assim, podemos contar o número de ocorrências de um padrão de expressão regular, 268 00:23:11,720 --> 00:23:13,960 e é isso que nós podemos usar para grupos. 269 00:23:13,960 --> 00:23:17,550 E outros modos bem também são possíveis. 270 00:23:18,040 --> 00:23:22,980 Então, eu só quero falar um pouco mais sobre outras maneiras que você pode usar expressões regulares. 271 00:23:22,980 --> 00:23:29,100 >> Assim, uma aplicação mais avançada é a correspondência difusa. 272 00:23:29,100 --> 00:23:33,450 Então, se você está procurando um texto para a expressão, Júlio César, 273 00:23:33,450 --> 00:23:37,740 e você quer ver Gaius Julius Caesar ou o nome de Júlio César em outras línguas, 274 00:23:37,740 --> 00:23:44,400 então você pode também querer atribuir algum peso a esses valores. 275 00:23:44,400 --> 00:23:48,930 E se é perto o suficiente - se cruza um determinado limite - então você quer 276 00:23:48,930 --> 00:23:50,860 para ser capaz de aceitar Júlio César. 277 00:23:50,860 --> 00:24:00,580 Portanto, há um par de diferentes implementações para que em algumas outras línguas também. 278 00:24:02,580 --> 00:24:08,420 Aqui estão algumas outras ferramentas, Regex Pal - um aplicativo pequeno e prático on-line para 279 00:24:08,420 --> 00:24:12,190 verificar se suas expressões regulares são compostas corretamente. 280 00:24:12,190 --> 00:24:18,500 Há também ferramentas autônomas que podem ser executados a partir de seu desktop 281 00:24:18,500 --> 00:24:22,100 Pico como Ultra, e, assim como livros de receitas apenas. 282 00:24:22,100 --> 00:24:25,410 Então, se você estiver fazendo um projeto que envolve uma tonelada de expressões regulares 283 00:24:25,410 --> 00:24:29,810 este é provavelmente o lugar para ir fora do âmbito de hoje. 284 00:24:31,520 --> 00:24:35,770 E, em seguida, só para lhe dar uma noção de como é comum 285 00:24:35,770 --> 00:24:44,090 há grep em Unix, Perl tem built-in, e C há PCRE para C. 286 00:24:44,090 --> 00:24:48,890 E então todas essas outras línguas também têm pacotes de expressões regulares 287 00:24:48,890 --> 00:24:52,020 que operam essencialmente com a mesma sintaxe que tem um gosto de hoje. 288 00:24:52,020 --> 00:24:54,790 PHP, Java, Ruby, e assim por diante. 289 00:24:56,080 --> 00:24:58,980 >> Google Code Search é realmente vale a pena mencionar, é um dos 290 00:24:58,980 --> 00:25:05,720 relativamente poucas aplicações lá fora, que permite ao público o acesso 291 00:25:05,720 --> 00:25:07,800 seu banco de dados usando expressões regulares. 292 00:25:07,800 --> 00:25:12,920 Então, se você olhar no Google Code Search, você pode encontrar o código 293 00:25:12,920 --> 00:25:16,880 Se você está procurando um exemplo de como uma função pode ser usada, 294 00:25:16,880 --> 00:25:21,610 você pode usar uma expressão regular para encontrar essa função está sendo usado em todos os tipos de casos diferentes. 295 00:25:21,610 --> 00:25:28,000 Você pode olhar para fwrite, e então você pode olhar para a bandeira de escrever ou ler 296 00:25:28,000 --> 00:25:32,000 se você quiser um exemplo de fwrite sendo usado nesse caso. 297 00:25:33,530 --> 00:25:37,010 Então, a mesma coisa lá, e aqui estão algumas referências. 298 00:25:37,010 --> 00:25:40,990 Este estará disponível on-line, bem como, assim que ir para a frente se 299 00:25:40,990 --> 00:25:45,560 você quer olhar para Python, grep, Perl - você só quer ter alguma inspiração 300 00:25:45,560 --> 00:25:50,650 ou se você quiser olhar mais para a teoria, aqui estão algumas boas salto fora do lugar. 301 00:25:50,650 --> 00:25:53,870 Muito obrigado. 302 00:25:58,470 --> 00:25:59,910 [CS50.TV]