1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Seminario: Correspondencia de patrón con expresións regulares] 2 00:00:02,000 --> 00:00:04,000 [John Mussman-Harvard University] 3 00:00:04,000 --> 00:00:07,220 [É dicir CS50.-CS50.TV] 4 00:00:07,780 --> 00:00:11,610 Okay. Benvidos todos. É dicir CS50 2012. 5 00:00:11,780 --> 00:00:16,610 O meu nome é Xoán, e vou falar hoxe sobre expresións regulares. 6 00:00:16,610 --> 00:00:22,530 As expresións regulares é esencialmente unha ferramenta, pero tamén por veces utilizado 7 00:00:22,530 --> 00:00:28,650 en código activamente para corresponden esencialmente patróns e cadeas. 8 00:00:28,650 --> 00:00:33,800 Entón aquí está un cómic web de xkcd. 9 00:00:34,440 --> 00:00:42,370 Neste cómic hai un misterio de asasinato onde o asasino ten 10 00:00:42,370 --> 00:00:47,860 seguido alguén en vacacións, e os protagonistas teñen que 11 00:00:47,860 --> 00:00:52,500 buscar a través de 200 megabytes de correos electrónicos na procura dun enderezo. 12 00:00:52,500 --> 00:00:56,090 E eles están a piques de desistir cando alguén que coñece expresións regulares - 13 00:00:56,090 --> 00:01:00,550 presuntamente un superheroe - descende rapidamente e escribe un código 14 00:01:00,550 --> 00:01:02,970 e resolve o misterio do asasinato. 15 00:01:02,970 --> 00:01:07,370 Así, presuntamente, que será algo que estará habilitado a facer 16 00:01:07,370 --> 00:01:09,370 tras este seminario. 17 00:01:09,370 --> 00:01:12,250 Nós só estamos indo a ofrecer unha introdución concisa á linguaxe 18 00:01:12,250 --> 00:01:16,770 e darlle o suficiente recursos para ir atrás de máis recursos no seu propio país. 19 00:01:17,680 --> 00:01:21,700 >> Así, expresións regulares ollar basicamente así. 20 00:01:22,930 --> 00:01:25,550 Esta é unha expresión regular en Ruby. 21 00:01:25,550 --> 00:01:29,280 Non é moi diferente entre as linguas. 22 00:01:29,690 --> 00:01:37,630 Temos só en barras para comezar e marcar a expresión regular en Ruby. 23 00:01:37,630 --> 00:01:42,880 E esta é unha expresión regular para buscar no correo electrónico estándar de enderezo. 24 00:01:42,880 --> 00:01:49,160 Así, podemos ver o primeiro bit mira para calquera carácter alfanumérico. 25 00:01:50,500 --> 00:01:54,880 Isto é porque os enderezos de correo-e, moitas veces ten que comezar cun carácter alfabético. 26 00:01:55,460 --> 00:01:59,330 E entón calquera carácter especial, seguida polo símbolo @. 27 00:01:59,330 --> 00:02:03,260 E, a continuación, o mesmo para o nome de dominio. 28 00:02:03,260 --> 00:02:10,030 E, a continuación, entre 2 e 4 personaxes para ollar a. Co,. Net, e así por diante. 29 00:02:10,850 --> 00:02:13,200 Entón ese é outro exemplo de expresión regular. 30 00:02:13,200 --> 00:02:17,270 Así, expresións regulares son protocolos para atopar patróns en texto. 31 00:02:17,270 --> 00:02:21,130 Eles fan comparacións, seleccións, e substitucións. 32 00:02:21,690 --> 00:02:27,970 Así, un terceiro exemplo é atopar todos os números de teléfonos que terminan en 54 nun directorio. 33 00:02:27,970 --> 00:02:34,360 Polo tanto, antes de David resga o directorio CS50 poderiamos buscar 34 00:02:34,360 --> 00:02:40,450 un patrón onde temos parénteses, a continuación, tres números despois acaban parénteses, 35 00:02:40,450 --> 00:02:44,070 Máis 3 números, un guión, dous números e, a continuación, 54. 36 00:02:44,070 --> 00:02:48,310 E iso sería esencialmente como podemos chegar a unha expresión regular para buscar iso. 37 00:02:49,150 --> 00:02:52,960 >> Polo tanto, hai - nós fixemos algunhas cousas en CS50 que son un pouco como 38 00:02:52,960 --> 00:02:59,740 expresións regulares, de xeito que - por exemplo - o ficheiro dictionary.C 39 00:02:59,740 --> 00:03:04,720 para a comprobación ortográfica conxunto de problemas que pode ter usado fscanf 40 00:03:04,720 --> 00:03:07,930 para ler nunha palabra do dicionario. 41 00:03:07,930 --> 00:03:16,240 E podes ver a 45s porcentaxe está buscando unha cadea de 45 caracteres. 42 00:03:16,240 --> 00:03:20,020 Por iso, é un pouco como unha expresión regular rudimentar. 43 00:03:21,150 --> 00:03:26,060 E pode ter todos os 45 caracteres que caben a conta alí 44 00:03:26,060 --> 00:03:28,080 e seleccionar aqueles enriba. 45 00:03:28,080 --> 00:03:33,480 E, a continuación, o segundo exemplo no último problema de programación web 46 00:03:33,480 --> 00:03:40,760 definido no código distro para php nós realmente temos unha expresión regular simple. 47 00:03:40,760 --> 00:03:46,790 E este é simplemente ollando para comprobar que a páxina web que está pasado en 48 00:03:46,790 --> 00:03:51,940 corresponde ou de entrar e saír rexistrar. PHP. 49 00:03:52,220 --> 00:03:57,910 E, a continuación, regresar verdadeiro ou falso con base nesa expresión correspondencia regular. 50 00:03:59,400 --> 00:04:01,740 >> Entón, cando usa a expresión regular? 51 00:04:01,740 --> 00:04:04,820 Por que está aquí hoxe? 52 00:04:05,330 --> 00:04:08,480 Así que non quere usar a expresión regular, cando hai algo que 53 00:04:08,480 --> 00:04:11,640 fai o traballo para ti mesmo con máis facilidade. 54 00:04:11,640 --> 00:04:15,510 Entón, XML e HTML son realmente moi complicado 55 00:04:15,510 --> 00:04:18,480 escribir expresións regulares para, como veremos de aquí a pouco. 56 00:04:19,110 --> 00:04:23,280 Polo tanto, hai análise dedicados a esas linguas. 57 00:04:24,170 --> 00:04:30,060 Tamén cómpre estar ben co comercio offs e precisión a miúdo. 58 00:04:30,060 --> 00:04:36,220 Se estás - polo que puidemos ver unha expresión regular para un enderezo de correo electrónico, 59 00:04:37,370 --> 00:04:42,590 pero dixo que quería un enderezo de correo-e específico e, gradualmente, o 60 00:04:42,590 --> 00:04:48,570 expresión regular pode chegar a ser máis complexa á medida que se fixo máis preciso. 61 00:04:49,580 --> 00:04:52,260 Entón, iso sería un trade off. 62 00:04:52,260 --> 00:04:55,330 Ten que estar seguro de que está facendo ben coa expresión regular. 63 00:04:55,330 --> 00:04:57,920 Se sabe exactamente o que está a buscar, pode facer máis sentido 64 00:04:57,920 --> 00:05:02,070 para poñer no tempo e escribir un parser máis eficaz. 65 00:05:02,070 --> 00:05:06,980 E, finalmente, hai unha cuestión histórica coa regularidade 66 00:05:06,980 --> 00:05:08,940 de expresións e linguaxes. 67 00:05:08,940 --> 00:05:12,960 As expresións regulares son realmente moito máis poderoso do que 68 00:05:12,960 --> 00:05:16,450 expresións regulares por dicir nun sentido formal. 69 00:05:17,130 --> 00:05:20,150 >> Entón, eu non quero ir lonxe de máis na teoría formal, 70 00:05:20,150 --> 00:05:24,000 pero a maioría das linguas que o código en realidade non son regulares. 71 00:05:24,000 --> 00:05:29,110 E é por iso que as expresións regulares, por veces, non son considerados todo que suxeita. 72 00:05:29,670 --> 00:05:33,150 Entón, basicamente, existe unha xerarquía de Chomsky linguas, 73 00:05:33,150 --> 00:05:38,400 e expresións regulares son construídas utilizando-se unión, concatenação, 74 00:05:38,400 --> 00:05:41,810 ea operación estrela Kleene que veremos en poucos minutos. 75 00:05:43,130 --> 00:05:48,860 Se estás interesado en teoría, hai moitas cousas a suceder por alí baixo o capó. 76 00:05:50,360 --> 00:05:55,880 >> Así, unha breve historia - só para o contexto aquí - conxuntos regulares veu 77 00:05:55,880 --> 00:05:59,580 na década de 1950, e despois tivemos editores simples que 78 00:05:59,580 --> 00:06:03,300 incorporou as expresións regulares - só buscando por cadeas. 79 00:06:03,570 --> 00:06:09,110 Grep - que é unha ferramenta de liña de comandos - foi un dos primeiros 80 00:06:09,110 --> 00:06:14,160 ferramentas moi populares que incorporou as expresións regulares na década de 1960. 81 00:06:14,160 --> 00:06:20,560 Nos anos 80, Perl foi construído - é unha linguaxe de programación que 82 00:06:20,560 --> 00:06:24,110 incorpora expresións regulares moi destacado. 83 00:06:24,550 --> 00:06:30,130 E entón, máis recentemente, tivemos Perl expresións regulares compatible 84 00:06:30,130 --> 00:06:35,870 protocolos basicamente noutras linguas que usan moito a mesma sintaxe. 85 00:06:36,630 --> 00:06:39,840 Claro que o acontecemento máis importante foi en 2008 86 00:06:39,840 --> 00:06:43,040 onde houbo o primeiro Día Nacional de expresións regulares, 87 00:06:43,040 --> 00:06:47,350 que eu creo que é 01 de xuño, se quere conmemorar. 88 00:06:48,430 --> 00:06:50,840 >> Unha vez máis, un pouco máis a teoría aquí. 89 00:06:52,180 --> 00:06:55,320 Polo tanto, hai algunhas formas diferentes de construír expresións regulares. 90 00:06:55,950 --> 00:07:02,050 Un xeito sinxelo é construír a expresión que está indo a 91 00:07:02,050 --> 00:07:07,500 executado na secuencia de interpretar - basicamente construír un mini-programa pouco que 92 00:07:07,500 --> 00:07:11,870 vai analizar anacos dunha corda para ver: "Ah, iso encaixa a expresión regular ou non?" 93 00:07:12,250 --> 00:07:14,250 E, a continuación, realizar iso. 94 00:07:14,250 --> 00:07:17,300 Entón se ten unha pequena expresión regular, este é, probablemente, 95 00:07:17,300 --> 00:07:19,380 a forma máis eficiente de facelo. 96 00:07:20,090 --> 00:07:25,420 E entón se - outra opción é manter a reconstruír o 97 00:07:25,420 --> 00:07:30,260 expresión que vaia, e que é a posibilidade de simulación. 98 00:07:30,440 --> 00:07:37,690 E esas primeiras tentativas de algoritmos de expresións regulares foron 99 00:07:37,690 --> 00:07:44,330 relativamente sinxela e relativamente rápido, pero non ten moita flexibilidade. 100 00:07:44,330 --> 00:07:47,500 Entón, para facer aínda algunhas das cousas que nós estamos indo ollar 101 00:07:47,500 --> 00:07:52,860 hoxe tivemos que facer expresión regular máis complexa 102 00:07:52,860 --> 00:07:56,650 implementacións que son potencialmente moito máis lento, de xeito que é algo a ter en conta 103 00:07:57,510 --> 00:08:02,920 Hai tamén unha expresión regular de denegación variedade ataque 104 00:08:02,920 --> 00:08:08,330 que explotan o potencial para estas implementacións máis recentes do 105 00:08:08,330 --> 00:08:10,930 expresións regulares para facer moi complexo. 106 00:08:11,570 --> 00:08:15,650 E en gran parte do mesmo xeito que vimos nos ataques de estourido de buffer, 107 00:08:15,650 --> 00:08:21,610 ten ataques de que o traballo por facer loops recursiva que 108 00:08:21,610 --> 00:08:24,400 superou a capacidade de memoria. 109 00:08:24,780 --> 00:08:29,540 E ao parecer Regexen é un dos plurales oficiais da expresión regular 110 00:08:29,540 --> 00:08:32,890 por analoxía con bois en anglosaxón. 111 00:08:33,500 --> 00:08:40,169 >> Ok, entón a biblioteca Python que moitos de vostedes aquí en persoa ten Macs, 112 00:08:40,169 --> 00:08:43,860 así realmente pode conseguir isto na súa pantalla. 113 00:08:43,860 --> 00:08:47,480 As expresións regulares son construídas en Python. 114 00:08:48,070 --> 00:08:53,020 E así Python é pre-cargado en Macs e tamén dispoñible en liña nesta ligazón. 115 00:08:53,770 --> 00:08:57,350 Entón, se está a asistir pode deter e asegúrese de que ten Python 116 00:08:58,080 --> 00:09:00,170 como xogamos aquí. 117 00:09:00,780 --> 00:09:06,420 Existe un manual en liña, entón se só escribir Python no seu computador 118 00:09:06,420 --> 00:09:10,500 vai ver que a versión xorde no terminal. 119 00:09:11,070 --> 00:09:17,720 Entón, eu forneci unha ligazón ao manual para a versión 2 do Python, así como unha folla de fraude. 120 00:09:17,720 --> 00:09:23,100 Hai unha versión 3 do Python, mais o seu Mac non necesariamente 121 00:09:23,100 --> 00:09:25,130 veñen con este precargado. 122 00:09:25,130 --> 00:09:27,360 Entón, non é moi diferente. 123 00:09:27,360 --> 00:09:33,270 Ok, entón algunhas nocións básicas de uso de expresións regulares en Python. 124 00:09:34,080 --> 00:09:42,650 >> Entón, aquí eu usei unha expresión moi sinxelo, entón eu fixen Python import re 125 00:09:43,750 --> 00:09:47,070 e, a continuación, levou o resultado re.search. 126 00:09:47,070 --> 00:09:49,910 E a procura leva dous argumentos. 127 00:09:49,910 --> 00:09:56,040 O primeiro é a expresión regular, e que o segundo é o texto 128 00:09:56,040 --> 00:09:58,290 ou secuencia que quere analizar. 129 00:09:58,290 --> 00:10:01,210 E entón eu imprimir o result.group. 130 00:10:01,580 --> 00:10:05,860 Entón, estas son as dúas funcións básicas que imos ver hoxe 131 00:10:06,790 --> 00:10:10,170 en aprender sobre expresións regulares. 132 00:10:10,170 --> 00:10:12,880 Entón, só tes que romper esta expresión regular aquí 133 00:10:12,880 --> 00:10:21,770 h e logo, \ w e m so \ w só acepta calquera carácter alfabético alí. 134 00:10:21,850 --> 00:10:26,820 Entón, aquí estamos buscando un "h" e logo, outro carácter alfabético 135 00:10:26,820 --> 00:10:30,060 e logo, m, entón aquí que ía coincidir con xamón 136 00:10:30,060 --> 00:10:34,480 en "Abraham Lincoln e bocadillos de xamón." 137 00:10:35,040 --> 00:10:37,150 Este é o resultado do dito grupo. 138 00:10:37,680 --> 00:10:43,130 Outra cousa que podemos facer é usar as nosas cordas antes do texto en Python. 139 00:10:43,130 --> 00:10:46,220 Entón eu creo que eu vou ir adiante e puxe que ata aquí. 140 00:10:46,220 --> 00:10:49,210 Python import re. 141 00:10:50,070 --> 00:10:54,000 E se eu fose facer o mesmo - digamos texto, 142 00:10:55,390 --> 00:11:00,800 "Abraham", imos facer zoom in - alí imos nós. 143 00:11:01,610 --> 00:11:06,430 O texto é: "Abraham come xamón." 144 00:11:07,460 --> 00:11:15,260 Vale, e logo resultado = re.search. 145 00:11:16,260 --> 00:11:22,020 E entón a nosa expresión pode ser h, e despois vou facer dot m. 146 00:11:22,020 --> 00:11:26,280 Entón dot só leva calquera carácter que non é unha nova liña, incluíndo números, 147 00:11:26,280 --> 00:11:28,650 sinais porcentuais, algo así. 148 00:11:28,650 --> 00:11:38,030 E entón o texto - crecemento - e logo, result.group--yeah. 149 00:11:38,030 --> 00:11:41,820 Entón, iso é só a forma de aplicar a funcionalidade básica aquí. 150 00:11:42,300 --> 00:11:55,110 Se tivésemos un anel texto - este texto tolo - incluído dicir moitas barras invertidas 151 00:11:55,110 --> 00:12:01,180 e cordas dentro e as cousas que podería parecer secuencias de escape, 152 00:12:01,180 --> 00:12:08,480 entón probablemente vai querer utilizar a entrada de texto simple para asegurarse de que é aceptado. 153 00:12:08,480 --> 00:12:14,120 E iso só se parece con isto. 154 00:12:14,120 --> 00:12:17,810 Entón, se estivésemos mirando para cada un deles alí, non hai que pensar nada. 155 00:12:19,070 --> 00:12:21,680 Pero é así que executalo, pouco antes da secuencia de 156 00:12:21,680 --> 00:12:24,990 a expresión regular que poñer a letra r. 157 00:12:26,150 --> 00:12:30,260 >> Ok, entón imos seguir. 158 00:12:30,260 --> 00:12:33,730 Todo ben - entón imos ollar para un par de patróns repetitivos aquí. 159 00:12:34,750 --> 00:12:39,150 Entón, unha cousa que quere facer é repetir as cousas 160 00:12:40,040 --> 00:12:42,480 como está a buscar a través de texto. 161 00:12:42,480 --> 00:12:48,300 Entón, para facer un seguido por calquera número de b - fai ab *. 162 00:12:48,630 --> 00:12:51,620 E despois hai unha serie de outras regras tamén. 163 00:12:51,620 --> 00:12:54,380 E pode mirar todos eses up, vou só correr por algúns dos 164 00:12:54,380 --> 00:12:57,630 máis comumente usado queridos. 165 00:12:57,630 --> 00:13:03,920 Así ab + é seguido por un calquera 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 {} é un seguido de N de b e logo así por diante. 168 00:13:18,580 --> 00:13:22,820 Se ten dous números nas claves que está especificando un intervalo 169 00:13:23,300 --> 00:13:25,440 que se pode, posiblemente combinados. 170 00:13:26,390 --> 00:13:30,420 Entón, imos ollar máis para algúns patróns repetitivos nun minuto. 171 00:13:31,960 --> 00:13:42,300 Así, dúas cousas para manter presente cando se utiliza estas ferramentas estándar de harmonización aquí. 172 00:13:42,300 --> 00:13:52,120 Entón, dicir que queremos mirar o hm de "Abraham Lincoln fai bocadillos de xamón." 173 00:13:52,120 --> 00:13:55,230 Entón eu mudei o nome de Abraham Lincoln a Abraham. 174 00:13:55,230 --> 00:14:00,290 E agora estamos a buscar o que é de retorno por esta función de investigación, 175 00:14:00,290 --> 00:14:03,270 e só volve xamón neste caso. 176 00:14:03,620 --> 00:14:08,080 E el fai iso por que busca só naturalmente leva máis á esquerda cola. 177 00:14:08,080 --> 00:14:12,130 E todas as expresións regulares, a non ser que especifique o contrario vai facer. 178 00:14:12,830 --> 00:14:18,880 Se quixésemos atopar todo o que existe é unha función para iso - atopar todos. 179 00:14:18,880 --> 00:14:35,100 De xeito que só podería parecer all = re.findall ('h.m', texto) 180 00:14:35,100 --> 00:14:44,540 e logo all.group (). 181 00:14:44,540 --> 00:14:51,040 Todos produce tanto fiambre e xamón, neste caso as dúas cordas en Abraham cada xamón. 182 00:14:51,610 --> 00:14:55,110 Entón, iso é outra opción. 183 00:14:56,250 --> 00:15:06,940 >> Grande. A outra cousa a ter presente é que as expresións regulares sacar o maior intuitivamente. 184 00:15:06,940 --> 00:15:09,520 Vexamos este exemplo. 185 00:15:10,200 --> 00:15:16,070 Fixemos iso máis á esquerda procura aquí, e entón eu tente unha procura máis 186 00:15:16,070 --> 00:15:18,800 usar o operador estrela de Kleene. 187 00:15:18,800 --> 00:15:24,180 Así, a "Abraham Lincoln fai bocadillos de xamón", e eu só teño 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ón para este erro foi que eu podería tomar calquera número de 190 00:15:31,670 --> 00:15:36,140 h é porque eu non especificou nada para ir entre h e m. 191 00:15:36,140 --> 00:15:42,010 O único exemplo que non m - os únicos exemplos alí con m nel 192 00:15:42,010 --> 00:15:46,220 e calquera número de horas de foron só o Barbante m. 193 00:15:46,490 --> 00:15:51,850 Entón eu tente de novo, eu dixen: "Ok, imos comezar o maior grupo real aquí." 194 00:15:51,850 --> 00:15:59,670 E entón eu fixen h. * M, de xeito que só retorna calquera número de carácteres entre h e m. 195 00:16:00,280 --> 00:16:02,950 E se está só comezando e pensar: "Oh, ben, ben, iso vai 196 00:16:02,950 --> 00:16:11,560 me han ", realmente ten de todo, dende o h en Abraham Lincoln 197 00:16:11,560 --> 00:16:13,690 todo o camiño ata o final de xamón. 198 00:16:14,040 --> 00:16:18,110 É ganancioso, que ve h - todo isto 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 notorio - esta é unha característica que tamén pode 201 00:16:27,480 --> 00:16:30,670 especificar para non ser ganancioso usar outras funcións. 202 00:16:31,480 --> 00:16:34,490 Pero iso é algo que temos que ter presente sobre todo 203 00:16:34,490 --> 00:16:38,720 cando se mira para o texto HTML, que é unha razón que 204 00:16:38,720 --> 00:16:41,500 expresións regulares son difíciles para HTML. 205 00:16:42,460 --> 00:16:46,310 Porque se ten unha etiqueta HTML aberta e, a continuación, unha morea de cousas no medio 206 00:16:46,310 --> 00:16:49,820 e logo, outra etiqueta HTML pechada moito máis tarde no programa, 207 00:16:49,820 --> 00:16:55,420 que acaba de comer unha morea de seu código HTML, posiblemente por erro. 208 00:16:56,200 --> 00:17:01,840 >> Todo ben - personaxes tan máis especiais, como moitas outras linguas, 209 00:17:01,840 --> 00:17:04,780 que escapar a través da barra. 210 00:17:04,780 --> 00:17:10,329 Así, podemos empregar o punto para especificar calquera carácter, excepto para unha nova liña. 211 00:17:10,329 --> 00:17:14,550 Podemos usar a fuga w para especificar calquera carácter alfabético. 212 00:17:14,550 --> 00:17:20,329 E por analoxía fuga d para calquera enteiro - personaxe numérica. 213 00:17:20,630 --> 00:17:27,440 Podemos especificar - podemos usar corchetes para indicar expresións relacionadas. 214 00:17:27,440 --> 00:17:30,970 Entón, iso sería aceptar a, b, c. 215 00:17:31,320 --> 00:17:37,000 E tamén pode especificar ou opcións para a ou b. 216 00:17:37,000 --> 00:17:41,110 Por exemplo - se estivésemos mirando múltiples posibilidades 217 00:17:41,110 --> 00:17:44,940 en soportes que poden utilizar o operador ou como en - 218 00:17:44,940 --> 00:17:52,480 entón imos volver a este exemplo aquí. 219 00:17:53,000 --> 00:17:59,790 E agora imos ter - imos volver a este exemplo aquí, e, a continuación, 220 00:17:59,790 --> 00:18:12,290 levar AE - de xeito que este debe devolver - Eu creo que iso aínda é Abraham. 221 00:18:12,290 --> 00:18:17,410 Polo tanto, este - se facemos todo - gran. 222 00:18:17,410 --> 00:18:22,700 Por iso, imos actualizar o texto aquí. 223 00:18:22,700 --> 00:18:34,690 "Abraham come xamón mentres a súa vaíña - mentres Hemming." Grande. 224 00:18:44,090 --> 00:18:47,330 Todo. Grande. Agora temos xamón, xamón, e vaíña. 225 00:18:48,510 --> 00:18:59,370 Mentres Hemming - mentres cantarolava para el - mentres cantarolava a vaíña del. Grande. 226 00:19:00,350 --> 00:19:03,250 Mesmo. 227 00:19:03,820 --> 00:19:09,180 Agora, todo volve aínda só xamón, xamón, e hem sen incorporarse o zumbido ou a el. 228 00:19:09,940 --> 00:19:22,600 Gran - así que se quixésemos ollar para calquera que - para que pudéssemos tamén facer 229 00:19:23,510 --> 00:19:33,810 el ou - imos volver a iso. 230 00:19:34,810 --> 00:19:45,760 Ok - entón - todo ben - en posicións que tamén pode utilizar o acento circunflexo ou o cifrão 231 00:19:45,760 --> 00:19:49,350 para indicar que quere máis que no inicio ou ao final dunha cadea. 232 00:19:50,260 --> 00:19:52,260 Ou o inicio ou o final dunha palabra. 233 00:19:52,400 --> 00:19:54,470 Esta é unha forma de usar iso. 234 00:19:55,630 --> 00:20:01,160 >> Ok - entón imos xogar con un bloque un pouco máis grande de texto. 235 00:20:03,950 --> 00:20:08,310 Digamos que esta liña aquí - esta declaración aquí. 236 00:20:08,310 --> 00:20:11,360 O poder de expresión normal é que poden especificar patróns 237 00:20:11,360 --> 00:20:13,390 non só fixa caracteres. 238 00:20:14,900 --> 00:20:18,790 Imos facer - imos chamar este bloque. 239 00:20:22,400 --> 00:20:27,110 Entón, imos ler todo iso dentro 240 00:20:28,890 --> 00:20:50,820 E despois ten a - imos facer todo =, entón o que son algunhas cousas que podería buscar aquí rendible? 241 00:20:50,820 --> 00:20:54,070 Poderiamos mirar para o oído expresión. 242 00:20:55,050 --> 00:21:01,520 Non é moi interesante. Que tal isto? Veremos que pasa. 243 00:21:03,710 --> 00:21:05,710 Eu dei-lle un problema. 244 00:21:06,380 --> 00:21:10,750 Así, unha serie de cousas antes de volver e todo máis. 245 00:21:10,750 --> 00:21:15,630 De xeito que debe devolver todo desde o principio ata a totalidade re quizais algunhas veces. 246 00:21:18,800 --> 00:21:21,970 E entón aquí temos o poder das expresións regulares é que 247 00:21:21,970 --> 00:21:24,900 pode especificar patróns non só personaxes están aquí. 248 00:21:24,900 --> 00:21:28,510 Así, todo o camiño ata o re final, que comezou coa máis esquerda e era ganancioso. 249 00:21:30,710 --> 00:21:32,710 A ver - o que máis poderiamos buscar. 250 00:21:32,710 --> 00:21:39,860 Eu creo que unha cousa se está interesado en ollar os pronomes ela e el, 251 00:21:39,860 --> 00:21:44,600 pode comprobar para s igual a 0 ou 1 252 00:21:44,600 --> 00:21:49,710 ea expresión que el, e que probablemente non vai volver - 253 00:21:49,710 --> 00:21:58,020 Oh, eu creo que volveu, porque non estamos a mirar para o poder, aquel día, aquí están. 254 00:22:00,590 --> 00:22:06,270 Imos tentar especificando que este ten que vir a comezos de algo. 255 00:22:06,640 --> 00:22:09,530 A ver se isto cae. 256 00:22:09,530 --> 00:22:19,630 Así, podemos facer graxa, e non nós non temos nada, porque ela e el 257 00:22:19,630 --> 00:22:22,870 non ocorren nesta frase. 258 00:22:24,960 --> 00:22:30,410 Grande. Ok - entón ao seu gato aquí. 259 00:22:30,410 --> 00:22:35,720 Patróns tan complexos e ferir o cerebro. 260 00:22:35,720 --> 00:22:40,500 Entón é por iso que usar expresións regulares para evitar estes problemas. 261 00:22:40,820 --> 00:22:43,520 >> Entón, aquí están algúns outros modos útiles que pode xogar. 262 00:22:43,520 --> 00:22:50,290 Miramos para investigación de hoxe, pero tamén pode usar o xogo, split, findall e grupos. 263 00:22:50,290 --> 00:22:53,970 Entón, outras cousas legais que podes facer con expresións regulares, ademais de só 264 00:22:53,970 --> 00:22:58,870 buscar patróns está tomando un patrón e mantendo todos os xogos - 265 00:22:58,870 --> 00:23:02,530 súas variables - e entón usar aqueles no seu código máis tarde. 266 00:23:02,850 --> 00:23:05,980 Isto pode ser moi útil. Outras cousas poden estar contando. 267 00:23:05,980 --> 00:23:11,720 Así, podemos contar o número de ocorrencias dun patrón de expresión regular, 268 00:23:11,720 --> 00:23:13,960 e é o que podemos utilizar para grupos. 269 00:23:13,960 --> 00:23:17,550 E outros modos ben tamén son posibles. 270 00:23:18,040 --> 00:23:22,980 Entón, eu só quero falar un pouco máis sobre outras formas que pode usar expresións regulares. 271 00:23:22,980 --> 00:23:29,100 >> Así, unha aplicación máis avanzada é a correspondencia difusa. 272 00:23:29,100 --> 00:23:33,450 Entón, se está a buscar un texto para a expresión, Xulio César, 273 00:23:33,450 --> 00:23:37,740 e quere ver Gaius Julius Caesar ou nome de Xulio César noutras linguas, 274 00:23:37,740 --> 00:23:44,400 entón podes querer asignar un peso a eses valores. 275 00:23:44,400 --> 00:23:48,930 E se é preto o suficiente - se cruza un determinado límite - entón quere 276 00:23:48,930 --> 00:23:50,860 para poder aceptar Xulio César. 277 00:23:50,860 --> 00:24:00,580 Polo tanto, hai un par de diferentes implementacións para que nalgunhas outras linguas tamén. 278 00:24:02,580 --> 00:24:08,420 Aquí están algunhas outras ferramentas, expresión regular Pal - unha aplicación pequeno e práctico en liña para 279 00:24:08,420 --> 00:24:12,190 comprobar se as súas expresións regulares son compostas correctamente. 280 00:24:12,190 --> 00:24:18,500 Hai tamén ferramentas autónomas que poden ser executados a partir do seu escritorio 281 00:24:18,500 --> 00:24:22,100 Pico como Ultra, e, así como libros de ingresos só. 282 00:24:22,100 --> 00:24:25,410 Entón, se está facendo un proxecto que implica unha tonelada de expresións regulares 283 00:24:25,410 --> 00:24:29,810 este é probablemente o lugar para ir fóra do ámbito de hoxe. 284 00:24:31,520 --> 00:24:35,770 E, a continuación, só para lle dar unha idea de como é común 285 00:24:35,770 --> 00:24:44,090 hai grep en Unix, Perl ten built-in, e C hai PCRE para C. 286 00:24:44,090 --> 00:24:48,890 E entón todas esas outras linguas tamén teñen paquetes de expresións regulares 287 00:24:48,890 --> 00:24:52,020 que operan esencialmente coa mesma sintaxe que ten un gusto de hoxe. 288 00:24:52,020 --> 00:24:54,790 PHP, Java, Ruby, e así por diante. 289 00:24:56,080 --> 00:24:58,980 >> Google Code Search é realmente paga a pena mencionar, é un dos 290 00:24:58,980 --> 00:25:05,720 relativamente poucas aplicacións aí fóra, que permite ao público o acceso 291 00:25:05,720 --> 00:25:07,800 súa base de datos usando expresións regulares. 292 00:25:07,800 --> 00:25:12,920 Entón, se ollar en Google Code Search, pode atopar o código 293 00:25:12,920 --> 00:25:16,880 Se está a buscar un exemplo de como unha función pode ser usada, 294 00:25:16,880 --> 00:25:21,610 pode usar unha expresión regular para atopar esta función está a ser usado en todo tipo de casos diferentes. 295 00:25:21,610 --> 00:25:28,000 Podes ollar para fwrite, e entón podes ollar para a bandeira de escribir ou ler 296 00:25:28,000 --> 00:25:32,000 se quere un exemplo de fwrite ser usado nese caso. 297 00:25:33,530 --> 00:25:37,010 Entón, o mesmo alí, e aquí están algunhas referencias. 298 00:25:37,010 --> 00:25:40,990 Este estará dispoñible en liña, así como, así que ir á fronte se 299 00:25:40,990 --> 00:25:45,560 quere ollar para Python, grep, Perl - só quere ter algunha inspiración 300 00:25:45,560 --> 00:25:50,650 ou se quere ollar máis para a teoría, aquí están algunhas boas salto fóra do lugar. 301 00:25:50,650 --> 00:25:53,870 Moitas grazas. 302 00:25:58,470 --> 00:25:59,910 [CS50.TV]