1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Seminario: Modello di corrispondenza con espressioni regolari] 2 00:00:02,000 --> 00:00:04,000 [John Mussman-Harvard University] 3 00:00:04,000 --> 00:00:07,220 [Questo è CS50.-CS50.TV] 4 00:00:07,780 --> 00:00:11,610 Va bene. Bene, benvenuti a tutti. Questo è CS50 2012. 5 00:00:11,780 --> 00:00:16,610 Il mio nome è John, e parlerò oggi sulle espressioni regolari. 6 00:00:16,610 --> 00:00:22,530 Le espressioni regolari è soprattutto uno strumento, ma anche a volte usati 7 00:00:22,530 --> 00:00:28,650 in codice attivamente per soddisfare essenzialmente modelli e stringhe. 8 00:00:28,650 --> 00:00:33,800 Quindi, ecco un web comic da xkcd. 9 00:00:34,440 --> 00:00:42,370 In questo fumetto vi è un giallo in cui l'assassino ha 10 00:00:42,370 --> 00:00:47,860 seguita qualcuno in vacanza, ei protagonisti devono 11 00:00:47,860 --> 00:00:52,500 cercare tra 200 megabyte di messaggi di posta elettronica alla ricerca di un indirizzo. 12 00:00:52,500 --> 00:00:56,090 E sono sul punto di rinunciare, quando qualcuno che conosce le espressioni regolari - 13 00:00:56,090 --> 00:01:00,550 presumibilmente un supereroe - piomba verso il basso e scrive un certo codice 14 00:01:00,550 --> 00:01:02,970 e risolve il mistero dell'omicidio. 15 00:01:02,970 --> 00:01:07,370 Quindi, presumibilmente, che sarà qualcosa che si ha il potere di fare 16 00:01:07,370 --> 00:01:09,370 dopo questo seminario. 17 00:01:09,370 --> 00:01:12,250 Stiamo solo andando a fornire una sintetica introduzione alla lingua 18 00:01:12,250 --> 00:01:16,770 e darà abbastanza mezzi per andare dopo più risorse sul proprio. 19 00:01:17,680 --> 00:01:21,700 >> Espressioni regolari così sembrano fondamentalmente come questo. 20 00:01:22,930 --> 00:01:25,550 Si tratta di una espressione regolare in Ruby. 21 00:01:25,550 --> 00:01:29,280 E non è molto diversa tra le varie lingue. 22 00:01:29,690 --> 00:01:37,630 Abbiamo solo su barre per iniziare e segnare l'espressione regolare in Ruby. 23 00:01:37,630 --> 00:01:42,880 E questa è una espressione regolare per cercare l'indirizzo email pattern. 24 00:01:42,880 --> 00:01:49,160 Così vediamo al primo bit cerca qualsiasi carattere alfanumerico. 25 00:01:50,500 --> 00:01:54,880 Questo perché gli indirizzi di posta elettronica spesso devono iniziare con un carattere alfabetico. 26 00:01:55,460 --> 00:01:59,330 E poi ogni carattere speciale seguita dal simbolo @. 27 00:01:59,330 --> 00:02:03,260 E poi la stessa cosa per il nome di dominio. 28 00:02:03,260 --> 00:02:10,030 E poi tra 2 e 4 caratteri per cercare il. Com,. Net, e così via. 29 00:02:10,850 --> 00:02:13,200 Quindi, questo è un altro esempio di espressione regolare. 30 00:02:13,200 --> 00:02:17,270 Espressioni regolari così sono protocolli per la ricerca di schemi in testo. 31 00:02:17,270 --> 00:02:21,130 Lo fanno i confronti, selezioni e sostituzioni. 32 00:02:21,690 --> 00:02:27,970 Quindi, un terzo esempio è trovare tutti i numeri di telefono che terminano in 54 in una directory. 33 00:02:27,970 --> 00:02:34,360 Quindi, prima di David strappa la directory CS50 potremmo cercare 34 00:02:34,360 --> 00:02:40,450 un modello in cui abbiamo parentesi poi 3 numeri poi finisce parentesi, 35 00:02:40,450 --> 00:02:44,070 Altre 3 cifre, un trattino, due numeri, e poi 54. 36 00:02:44,070 --> 00:02:48,310 E questo sarebbe essenzialmente come arriviamo con una espressione regolare per la ricerca di questo. 37 00:02:49,150 --> 00:02:52,960 >> Quindi ci sono - abbiamo fatto alcune cose in CS50 che sono un po 'come 38 00:02:52,960 --> 00:02:59,740 espressioni regolari, per cui - ad esempio - nel file dictionary.C 39 00:02:59,740 --> 00:03:04,720 per il controllo ortografico problema insieme potrebbe essere utilizzato fscanf 40 00:03:04,720 --> 00:03:07,930 di leggere in una parola dal dizionario. 41 00:03:07,930 --> 00:03:16,240 E si può vedere il 45s percentuale è alla ricerca di una stringa di 45 caratteri. 42 00:03:16,240 --> 00:03:20,020 Quindi è un po 'come una espressione regolare rudimentale. 43 00:03:21,150 --> 00:03:26,060 E si può avere 45 caratteri che misura la fattura in là 44 00:03:26,060 --> 00:03:28,080 e scegliere quelli su. 45 00:03:28,080 --> 00:03:33,480 E poi il secondo esempio nella più recente problema di programmazione web 46 00:03:33,480 --> 00:03:40,760 stabilito nel codice php distro per noi in realtà hanno una semplice espressione regolare. 47 00:03:40,760 --> 00:03:46,790 E questo è semplicemente cercando di verificare se la pagina web che viene passato 48 00:03:46,790 --> 00:03:51,940 corrisponde o login o il logout registrazione. PHP. 49 00:03:52,220 --> 00:03:57,910 E poi il ritorno vero o falso sulla base di tale corrispondenza dell'espressione regolare. 50 00:03:59,400 --> 00:04:01,740 >> Così, quando si usa l'espressione regolare? 51 00:04:01,740 --> 00:04:04,820 Perché sei qui oggi? 52 00:04:05,330 --> 00:04:08,480 Quindi non si vuole usare un'espressione regolare quando c'è qualcosa che 53 00:04:08,480 --> 00:04:11,640 fa ancora più facilmente il lavoro per voi. 54 00:04:11,640 --> 00:04:15,510 Quindi, XML e HTML sono in realtà piuttosto difficile 55 00:04:15,510 --> 00:04:18,480 di scrivere espressioni regolari per come vedremo tra poco. 56 00:04:19,110 --> 00:04:23,280 Quindi ci sono i parser dedicati per tali lingue. 57 00:04:24,170 --> 00:04:30,060 È inoltre necessario essere a posto con il compromessi e precisione di frequente. 58 00:04:30,060 --> 00:04:36,220 Se si sta cercando - e quindi abbiamo visto una espressione regolare per un indirizzo di posta elettronica, 59 00:04:37,370 --> 00:04:42,590 ma dici che volevi un indirizzo email specifico e gradualmente il 60 00:04:42,590 --> 00:04:48,570 espressione regolare potrebbe diventare più complesso come è diventato più preciso. 61 00:04:49,580 --> 00:04:52,260 In modo che sarebbe un compromesso. 62 00:04:52,260 --> 00:04:55,330 Dovete essere sicuri che si sta facendo bene con l'espressione regolare. 63 00:04:55,330 --> 00:04:57,920 Se sai esattamente quello che stai cercando potrebbe avere più senso 64 00:04:57,920 --> 00:05:02,070 a mettere in tempo e scrivere un parser più efficace. 65 00:05:02,070 --> 00:05:06,980 E infine c'è un problema storico con la regolarità 66 00:05:06,980 --> 00:05:08,940 di espressioni e linguaggi. 67 00:05:08,940 --> 00:05:12,960 Le espressioni regolari sono in realtà molto più potente di 68 00:05:12,960 --> 00:05:16,450 espressioni regolari per dire in senso formale. 69 00:05:17,130 --> 00:05:20,150 >> Quindi io non voglio andare troppo lontano nella teoria formale, 70 00:05:20,150 --> 00:05:24,000 ma la maggior parte delle lingue che noi codice in realtà non sono regolari. 71 00:05:24,000 --> 00:05:29,110 E questo è il motivo per cui le espressioni regolari a volte non vengono considerati tutti che sicuro. 72 00:05:29,670 --> 00:05:33,150 Quindi, in pratica vi è una gerarchia di Chomsky per le lingue, 73 00:05:33,150 --> 00:05:38,400 e le espressioni regolari sono costruire con l'unione, concatenazione, 74 00:05:38,400 --> 00:05:41,810 e l'operazione di Kleene stella che vedremo in pochi minuti. 75 00:05:43,130 --> 00:05:48,860 Se siete interessati in teoria c'è un sacco succede là sotto il cofano. 76 00:05:50,360 --> 00:05:55,880 >> Quindi un po 'di storia - solo per il contesto qui - insiemi regolari si avvicinò 77 00:05:55,880 --> 00:05:59,580 nel 1950, e poi abbiamo avuto redattori semplici che 78 00:05:59,580 --> 00:06:03,300 incorporate le espressioni regolari - solo ricerca di stringhe. 79 00:06:03,570 --> 00:06:09,110 Grep - che è uno strumento a riga di comando - è stato uno dei primi 80 00:06:09,110 --> 00:06:14,160 strumenti molto popolari che incorporati espressioni regolari nel 1960. 81 00:06:14,160 --> 00:06:20,560 Negli anni '80, Perl è stato costruito - è un linguaggio di programmazione che 82 00:06:20,560 --> 00:06:24,110 incorpora espressioni regolari molto prominente. 83 00:06:24,550 --> 00:06:30,130 E poi, più recentemente abbiamo avuto Perl espressioni regolari compatibile 84 00:06:30,130 --> 00:06:35,870 protocolli fondamentalmente in altre lingue che utilizzano gran parte la stessa sintassi. 85 00:06:36,630 --> 00:06:39,840 Naturalmente l'evento più importante è stato nel 2008 86 00:06:39,840 --> 00:06:43,040 dove c'era la prima Espressioni regolari Giornata Nazionale, 87 00:06:43,040 --> 00:06:47,350 che credo sia 1 giugno se si vuole festeggiare. 88 00:06:48,430 --> 00:06:50,840 >> Anche in questo caso, solo un po 'di più la teoria qui. 89 00:06:52,180 --> 00:06:55,320 Quindi ci sono un paio di modi diversi di costruire espressioni regolari. 90 00:06:55,950 --> 00:07:02,050 Un modo semplice è quello di costruire l'espressione che si sta per 91 00:07:02,050 --> 00:07:07,500 eseguire sulla stringa interpretare - fondamentalmente costruire un piccolo mini-programma che 92 00:07:07,500 --> 00:07:11,870 analizzerà i pezzi di una stringa e vedere: "Oh, questo non si adatta l'espressione regolare o no?" 93 00:07:12,250 --> 00:07:14,250 E quindi eseguire tale. 94 00:07:14,250 --> 00:07:17,300 Quindi, se si dispone di una piccola espressione regolare, questo è probabilmente 95 00:07:17,300 --> 00:07:19,380 il modo più efficiente per farlo. 96 00:07:20,090 --> 00:07:25,420 E poi se si - un'altra opzione è quella di mantenere la ricostruzione della 97 00:07:25,420 --> 00:07:30,260 espressione, come si va, e cioè la possibilità di simulazione. 98 00:07:30,440 --> 00:07:37,690 E questi primi tentativi di algoritmi di espressioni regolari erano 99 00:07:37,690 --> 00:07:44,330 relativamente semplice e relativamente veloce, ma non ha avuto un sacco di flessibilità. 100 00:07:44,330 --> 00:07:47,500 Quindi, per fare anche alcune delle cose che stiamo andando a guardare 101 00:07:47,500 --> 00:07:52,860 oggi abbiamo avuto a che fare più complessa espressione regolare 102 00:07:52,860 --> 00:07:56,650 implementazioni che sono potenzialmente molto più lento, così che è qualcosa da tenere a mente 103 00:07:57,510 --> 00:08:02,920 C'è anche una espressione regolare negazione della varietà attacco 104 00:08:02,920 --> 00:08:08,330 che sfruttare il potenziale di queste implementazioni più recenti di 105 00:08:08,330 --> 00:08:10,930 espressioni regolari per diventare molto complessa. 106 00:08:11,570 --> 00:08:15,650 E nello stesso senso che abbiamo visto in attacchi di buffer overflow, 107 00:08:15,650 --> 00:08:21,610 si dispone di attacchi che il lavoro da fare loop ricorsivo che 108 00:08:21,610 --> 00:08:24,400 superamento della capacità di memoria. 109 00:08:24,780 --> 00:08:29,540 E dal modo in Regexen è uno dei plurali ufficiali della espressione regolare 110 00:08:29,540 --> 00:08:32,890 per analogia al buoi in quello anglosassone. 111 00:08:33,500 --> 00:08:40,169 >> Ok, allora la Biblioteca Python molti di voi qui in persona hanno i Mac, 112 00:08:40,169 --> 00:08:43,860 così si può effettivamente tirare questo sul vostro schermo. 113 00:08:43,860 --> 00:08:47,480 Le espressioni regolari sono costruite in Python. 114 00:08:48,070 --> 00:08:53,020 E così Python è precaricato su Mac e anche disponibile on-line a questo link. 115 00:08:53,770 --> 00:08:57,350 Quindi, se si sta guardando è possibile mettere in pausa e di assicurarsi di avere Python 116 00:08:58,080 --> 00:09:00,170 come si gioca qui. 117 00:09:00,780 --> 00:09:06,420 C'è un manuale online, quindi se digiti Python nel vostro computer 118 00:09:06,420 --> 00:09:10,500 vedrete che la versione esce nel terminale. 119 00:09:11,070 --> 00:09:17,720 Così ho fornito un link al manuale per la versione 2 di Python, nonché un foglietto. 120 00:09:17,720 --> 00:09:23,100 Vi è una versione 3 di Python, ma il Mac non necessariamente 121 00:09:23,100 --> 00:09:25,130 venire con quella precaricata. 122 00:09:25,130 --> 00:09:27,360 Quindi, non è terribilmente diversa. 123 00:09:27,360 --> 00:09:33,270 Ok, quindi alcuni principi fondamentali di utilizzo di espressioni regolari in Python. 124 00:09:34,080 --> 00:09:42,650 >> Così qui ho usato una espressione molto semplice, così ho fatto Python import re 125 00:09:43,750 --> 00:09:47,070 e poi ha preso il risultato di re.search. 126 00:09:47,070 --> 00:09:49,910 E la ricerca prende due argomenti. 127 00:09:49,910 --> 00:09:56,040 Il primo è l'espressione regolare, e il secondo è il testo 128 00:09:56,040 --> 00:09:58,290 o stringa che si desidera analizzare. 129 00:09:58,290 --> 00:10:01,210 E poi ho stampato il result.group. 130 00:10:01,580 --> 00:10:05,860 Quindi queste sono le due funzioni di base che andremo a vedere oggi 131 00:10:06,790 --> 00:10:10,170 a conoscere le espressioni regolari. 132 00:10:10,170 --> 00:10:12,880 Quindi, solo abbattendo questa espressione regolare qui 133 00:10:12,880 --> 00:10:21,770 h e poi \ w, quindi m così \ w accetta un qualsiasi carattere alfabetico in là. 134 00:10:21,850 --> 00:10:26,820 Così qui siamo alla ricerca di una "h" e poi un altro carattere alfabetico 135 00:10:26,820 --> 00:10:30,060 e poi m, ecco che sarebbe partita prosciutto 136 00:10:30,060 --> 00:10:34,480 In ", panini Abraham Lincoln e prosciutto." 137 00:10:35,040 --> 00:10:37,150 Questo è il risultato di tale gruppo. 138 00:10:37,680 --> 00:10:43,130 Un'altra cosa che possiamo fare è usare le nostre corde prima di testo in Python. 139 00:10:43,130 --> 00:10:46,220 Quindi credo che andrò avanti e tirare che fino qui. 140 00:10:46,220 --> 00:10:49,210 Python import re. 141 00:10:50,070 --> 00:10:54,000 E se dovessi fare la stessa cosa - diciamo così di testo è, 142 00:10:55,390 --> 00:11:00,800 "Abramo", fateci Zoom In - ci siamo. 143 00:11:01,610 --> 00:11:06,430 Il testo è: "Abramo mangia prosciutto". 144 00:11:07,460 --> 00:11:15,260 Va bene, e allora risultato = re.search. 145 00:11:16,260 --> 00:11:22,020 E poi la nostra espressione può essere h, e poi mi farà dot m. 146 00:11:22,020 --> 00:11:26,280 Quindi dot prende un qualsiasi carattere che non sia una nuova linea compresi i numeri, 147 00:11:26,280 --> 00:11:28,650 segni di percentuale, qualcosa di simile. 148 00:11:28,650 --> 00:11:38,030 E poi il testo - braccio - e poi result.group--si. 149 00:11:38,030 --> 00:11:41,820 Quindi questo è solo come implementare funzionalità di base qui. 150 00:11:42,300 --> 00:11:55,110 Se avessimo un anello testo - che il testo pazza - incluso dicono un sacco di barre rovesciate 151 00:11:55,110 --> 00:12:01,180 e stringhe all'interno e cose che potrebbero apparire come sequenze di escape, 152 00:12:01,180 --> 00:12:08,480 allora probabilmente vogliamo utilizzare il metodo di scrittura prima per assicurarsi che è accettato. 153 00:12:08,480 --> 00:12:14,120 E che sembra proprio così. 154 00:12:14,120 --> 00:12:17,810 Quindi, se stavamo cercando per ciascuno di essi in là non dovremmo trovare nulla. 155 00:12:19,070 --> 00:12:21,680 Ma è così che si dovrebbe attuarlo; poco prima della stringa di 156 00:12:21,680 --> 00:12:24,990 l'espressione regolare che ha messo la lettera r. 157 00:12:26,150 --> 00:12:30,260 >> Ok, quindi cerchiamo di andare avanti. 158 00:12:30,260 --> 00:12:33,730 Va bene - così vediamo un paio di schemi ripetitivi qui. 159 00:12:34,750 --> 00:12:39,150 Quindi una cosa che si vuole fare è ripetere le cose 160 00:12:40,040 --> 00:12:42,480 come si sta cercando attraverso il testo. 161 00:12:42,480 --> 00:12:48,300 Quindi, per fare un seguito da un numero qualsiasi di b - si fa ab *. 162 00:12:48,630 --> 00:12:51,620 E poi ci sono una serie di altre norme troppo. 163 00:12:51,620 --> 00:12:54,380 E si può guardare tutti questi up, mi limiterò a passare per alcuni dei 164 00:12:54,380 --> 00:12:57,630 quelli più comunemente utilizzati. 165 00:12:57,630 --> 00:13:03,920 Così ab + è seguito da un qualsiasi N maggiore di 0 di b. 166 00:13:04,510 --> 00:13:08,000 ab? è seguito da 0 o 1 di b. 167 00:13:09,190 --> 00:13:18,580 ab {N} è seguita da N di b, e poi così via. 168 00:13:18,580 --> 00:13:22,820 Se si dispone di due numeri in parentesi graffe si specifica un intervallo di 169 00:13:23,300 --> 00:13:25,440 che può essere eventualmente abbinato. 170 00:13:26,390 --> 00:13:30,420 Così vedremo più in un paio di schemi ripetitivi in ​​un minuto. 171 00:13:31,960 --> 00:13:42,300 Quindi due cose da tenere a mente quando si utilizzano questi strumenti di disegno di corrispondenza qui. 172 00:13:42,300 --> 00:13:52,120 Quindi diciamo che vogliamo guardare l'hm di "Abraham Lincoln fa panini al prosciutto." 173 00:13:52,120 --> 00:13:55,230 Così ho cambiato il nome di Abraham Lincoln ad Abramo. 174 00:13:55,230 --> 00:14:00,290 E ora siamo alla ricerca di ciò che viene restituito da questa funzione di ricerca, 175 00:14:00,290 --> 00:14:03,270 e restituisce solo prosciutto in questo caso. 176 00:14:03,620 --> 00:14:08,080 E lo fa perché cerca solo prende naturalmente la maggior parte della coda sinistra. 177 00:14:08,080 --> 00:14:12,130 E tutte le espressioni regolari se non diversamente specificato farà. 178 00:14:12,830 --> 00:14:18,880 Se volessimo trovare tutto quello che c'è una funzione per questo - trovare a tutti. 179 00:14:18,880 --> 00:14:35,100 In modo che può solo guardare come tutti = re.findall ('h.m', testo) 180 00:14:35,100 --> 00:14:44,540 e poi all.group (). 181 00:14:44,540 --> 00:14:51,040 Tutti produce sia prosciutto e prosciutto, in questo caso entrambe le stringhe in Abramo ogni prosciutto. 182 00:14:51,610 --> 00:14:55,110 Quindi questa è un'altra opzione. 183 00:14:56,250 --> 00:15:06,940 >> Grande. L'altra cosa da tenere a mente è che le espressioni regolari prendono il più grande intuitivamente. 184 00:15:06,940 --> 00:15:09,520 Vediamo questo esempio. 185 00:15:10,200 --> 00:15:16,070 Abbiamo fatto quello più a sinistra di ricerca qui, e poi ho tentato una ricerca più grande 186 00:15:16,070 --> 00:15:18,800 utilizzando l'operatore Kleene stella. 187 00:15:18,800 --> 00:15:24,180 Così per "Abraham Lincoln fa panini al prosciutto," e ho solo tornato 188 00:15:24,180 --> 00:15:26,280 m come risultato. 189 00:15:26,280 --> 00:15:31,670 La ragione di questo errore è che ho potuto prendere un qualsiasi numero di 190 00:15:31,670 --> 00:15:36,140 h 'perché non ho specificato tutto da seguire tra h e m. 191 00:15:36,140 --> 00:15:42,010 L'unico esempio che ci aveva m - gli unici esempi lì con m in esso 192 00:15:42,010 --> 00:15:46,220 e qualsiasi numero di h è erano solo la stringa m. 193 00:15:46,490 --> 00:15:51,850 Poi ho provato di nuovo, ho detto: "Va bene, cerchiamo di ottenere il più grande gruppo reale qui." 194 00:15:51,850 --> 00:15:59,670 E poi ho fatto h. * M, in modo che restituisce solo un numero qualsiasi di caratteri tra h e m. 195 00:16:00,280 --> 00:16:02,950 E se si è appena agli inizi e pensare: "Oh, va bene, bene questo sarà 196 00:16:02,950 --> 00:16:11,560 portami prosciutto, "ci vuole davvero tutto dalla h in Abraham Lincoln 197 00:16:11,560 --> 00:16:13,690 tutto il percorso fino alla fine del prosciutto. 198 00:16:14,040 --> 00:16:18,110 È avido, ma vede h - tutto questo altro testo - m, 199 00:16:18,110 --> 00:16:21,280 e questo è quello che ci vuole dentro 200 00:16:22,060 --> 00:16:27,480 Ciò è particolarmente eclatanti - questa è una caratteristica che possiamo anche 201 00:16:27,480 --> 00:16:30,670 specificare per non essere avidi usando altre funzioni. 202 00:16:31,480 --> 00:16:34,490 Ma questo è qualcosa che dobbiamo tenere a mente soprattutto 203 00:16:34,490 --> 00:16:38,720 quando guardando testo HTML, che è uno dei motivi che 204 00:16:38,720 --> 00:16:41,500 le espressioni regolari sono difficili per HTML. 205 00:16:42,460 --> 00:16:46,310 Perché se si dispone di un tag HTML aperto e poi un sacco di roba in mezzo 206 00:16:46,310 --> 00:16:49,820 e poi qualche altro tag HTML chiuso molto più tardi nel programma, 207 00:16:49,820 --> 00:16:55,420 avete appena mangiato un sacco di codice HTML possibilmente per errore. 208 00:16:56,200 --> 00:17:01,840 >> Tutti i giusti - i caratteri in modo più speciale, come molte altre lingue, 209 00:17:01,840 --> 00:17:04,780 fuggiamo utilizzando la barra. 210 00:17:04,780 --> 00:17:10,329 Quindi possiamo usare il punto per specificare qualsiasi carattere ad eccezione di una nuova linea. 211 00:17:10,329 --> 00:17:14,550 Possiamo usare la fuga w per specificare qualsiasi carattere alfabetico. 212 00:17:14,550 --> 00:17:20,329 E per analogia fuga d per ogni intero - carattere numerico. 213 00:17:20,630 --> 00:17:27,440 Siamo in grado di precisare - siamo in grado di utilizzare le parentesi per specificare le espressioni correlate. 214 00:17:27,440 --> 00:17:30,970 Quindi questo avrebbe accettato a, b, o c. 215 00:17:31,320 --> 00:17:37,000 E possiamo anche specificare o opzioni per a oppure b. 216 00:17:37,000 --> 00:17:41,110 Per esempio - se stavamo cercando molteplici possibilità 217 00:17:41,110 --> 00:17:44,940 tra parentesi si potrebbe utilizzare l'operatore o come in - 218 00:17:44,940 --> 00:17:52,480 così torniamo a questo esempio qui. 219 00:17:53,000 --> 00:17:59,790 E ora prendiamo - torniamo a questo esempio qui, e poi 220 00:17:59,790 --> 00:18:12,290 prendere ae - quindi questo dovrebbe restituire - Credo che questo sia ancora Abramo. 221 00:18:12,290 --> 00:18:17,410 Quindi questa - se facciamo tutti - grandi. 222 00:18:17,410 --> 00:18:22,700 Cerchiamo quindi di aggiornare il testo qui. 223 00:18:22,700 --> 00:18:34,690 "Abramo mangia prosciutto mentre orlatura sua -. Mentre orlatura" Grande. 224 00:18:44,090 --> 00:18:47,330 Tutti. Grande. Ora abbiamo il prosciutto, prosciutto, e orlo. 225 00:18:48,510 --> 00:18:59,370 Mentre orlatura - mentre canticchiando a lui - mentre canticchiando orlo lui. Grande. 226 00:19:00,350 --> 00:19:03,250 Stessa cosa. 227 00:19:03,820 --> 00:19:09,180 Ora tutto torna ancora solo prosciutto, prosciutto, e orlo senza sollevare il ronzio o il di lui. 228 00:19:09,940 --> 00:19:22,600 Grande - così che cosa se volessimo vedere i due che - in modo da poter anche fare 229 00:19:23,510 --> 00:19:33,810 lui o - ci torneremo a questo. 230 00:19:34,810 --> 00:19:45,760 Va bene - così - tutti i diritti - in posizioni è anche possibile utilizzare il cursore o il simbolo del dollaro 231 00:19:45,760 --> 00:19:49,350 per specificare che si sta cercando qualcosa all'inizio o alla fine di una stringa. 232 00:19:50,260 --> 00:19:52,260 Oppure l'inizio o la fine di una parola. 233 00:19:52,400 --> 00:19:54,470 Questo è un modo di utilizzare tale. 234 00:19:55,630 --> 00:20:01,160 >> Va bene - quindi cerchiamo di giocare con un po 'più grande blocco di testo. 235 00:20:03,950 --> 00:20:08,310 Diciamo questa riga qui - questa affermazione qui. 236 00:20:08,310 --> 00:20:11,360 Il potere di espressione regolare è che possono specificare i modelli di 237 00:20:11,360 --> 00:20:13,390 non solo i caratteri fissi. 238 00:20:14,900 --> 00:20:18,790 Facciamo - chiamiamo questo blocco. 239 00:20:22,400 --> 00:20:27,110 Poi ci sarà leggere tutto questo dentro 240 00:20:28,890 --> 00:20:50,820 E poi hanno un - facciamo tutti =, così che cosa sono alcune cose che potremmo cercare qui dentro con profitto? 241 00:20:50,820 --> 00:20:54,070 Potremmo cercare l'orecchio espressione. 242 00:20:55,050 --> 00:21:01,520 Non molto interessante. Che ne dici? Staremo a vedere cosa succede. 243 00:21:03,710 --> 00:21:05,710 Ho dato un problema. 244 00:21:06,380 --> 00:21:10,750 Quindi, qualsiasi numero di cose prima di re e di tutti. 245 00:21:10,750 --> 00:21:15,630 Così che dovrebbe tornare tutto dall'inizio fino a tutto ri forse un paio di volte. 246 00:21:18,800 --> 00:21:21,970 E poi qui abbiamo il potere di espressioni regolari è che essi 247 00:21:21,970 --> 00:21:24,900 può specificare i modelli non solo personaggi qui sono. 248 00:21:24,900 --> 00:21:28,510 Quindi, tutta la strada fino alla ri finale, è iniziato con la più a sinistra ed è stato avido. 249 00:21:30,710 --> 00:21:32,710 Vediamo - che altro possiamo cercare. 250 00:21:32,710 --> 00:21:39,860 Credo che una cosa se foste interessati a cercare i pronomi lei e lui, 251 00:21:39,860 --> 00:21:44,600 si potrebbe verificare la presenza di s è uguale a 0 o 1 252 00:21:44,600 --> 00:21:49,710 e l'espressione lui, e che probabilmente non sta per tornare - 253 00:21:49,710 --> 00:21:58,020 Oh, credo che egli ritornò perché ci stiamo guardando il potere, quel giorno, ecco. 254 00:22:00,590 --> 00:22:06,270 Cerchiamo precisando che questo deve avvenire a inizio di qualcosa. 255 00:22:06,640 --> 00:22:09,530 Vediamo se questo cade. 256 00:22:09,530 --> 00:22:19,630 Così possiamo fare il grasso, e non ci non ottenere nulla, perché lei e lui 257 00:22:19,630 --> 00:22:22,870 non si verificano in questa frase. 258 00:22:24,960 --> 00:22:30,410 Grande. Va bene - in modo nuovo al gatto qui. 259 00:22:30,410 --> 00:22:35,720 Modelli così complesso sta danneggiando il cervello. 260 00:22:35,720 --> 00:22:40,500 Quindi è per questo che usiamo le espressioni regolari per evitare questi problemi. 261 00:22:40,820 --> 00:22:43,520 >> Così qui sono alcune altre modalità utili si può giocare con. 262 00:22:43,520 --> 00:22:50,290 Abbiamo guardato ricerca di oggi, ma è possibile utilizzare anche incontro, dividere, findall, e gruppi. 263 00:22:50,290 --> 00:22:53,970 Così le altre cose interessanti che si possono fare con le espressioni regolari, non solo di 264 00:22:53,970 --> 00:22:58,870 ricerca di modelli sta prendendo un modello e tenendo tutte le partite - 265 00:22:58,870 --> 00:23:02,530 le sue variabili - e quindi utilizzando quelli nel codice successivamente. 266 00:23:02,850 --> 00:23:05,980 Che può essere molto utile. Altre cose che potrebbero essere di conteggio. 267 00:23:05,980 --> 00:23:11,720 Così siamo in grado di contare il numero di istanze di un modello di espressione regolare, 268 00:23:11,720 --> 00:23:13,960 e questo è ciò che siamo in grado di utilizzare i gruppi per. 269 00:23:13,960 --> 00:23:17,550 E altri modi così sono anche possibili. 270 00:23:18,040 --> 00:23:22,980 Quindi, voglio solo parlare un po 'di più su altri modi è possibile utilizzare le espressioni regolari. 271 00:23:22,980 --> 00:23:29,100 >> Così una applicazione più avanzata è in corrispondenza fuzzy. 272 00:23:29,100 --> 00:23:33,450 Quindi, se siete alla ricerca di un testo per l'espressione, Giulio Cesare, 273 00:23:33,450 --> 00:23:37,740 e si vede sia Caio Giulio Cesare o il nome di Giulio Cesare in altre lingue, 274 00:23:37,740 --> 00:23:44,400 allora si potrebbe anche voler assegnare un certo peso a quei valori. 275 00:23:44,400 --> 00:23:48,930 E se è abbastanza vicino - se attraversa una certa soglia - poi si desidera 276 00:23:48,930 --> 00:23:50,860 per essere in grado di accettare Giulio Cesare. 277 00:23:50,860 --> 00:24:00,580 Quindi ci sono un paio di diverse implementazioni per che in alcune altre lingue. 278 00:24:02,580 --> 00:24:08,420 Qui ci sono alcuni altri strumenti, Regex Pal - un po 'di applicazione pratica on-line per 279 00:24:08,420 --> 00:24:12,190 controllare se le espressioni regolari sono composti correttamente. 280 00:24:12,190 --> 00:24:18,500 Ci sono anche strumenti indipendenti che è possibile eseguire dal desktop 281 00:24:18,500 --> 00:24:22,100 come Pico Ultra, e così come pochi libri di cucina. 282 00:24:22,100 --> 00:24:25,410 Quindi, se si sta facendo un progetto che coinvolge un sacco di espressioni regolari 283 00:24:25,410 --> 00:24:29,810 questo è probabilmente il posto dove andare fuori dell'ambito di oggi. 284 00:24:31,520 --> 00:24:35,770 E poi solo per darvi un'idea di come comune è 285 00:24:35,770 --> 00:24:44,090 c'è grep in Unix, Perl ha built-in, e C c'è PCRE per C. 286 00:24:44,090 --> 00:24:48,890 E poi tutte le altre lingue hanno anche pacchetti di espressioni regolari 287 00:24:48,890 --> 00:24:52,020 che operano con sostanzialmente la stessa sintassi che abbiamo ottenuto un assaggio di oggi. 288 00:24:52,020 --> 00:24:54,790 PHP, Java, Ruby, e così via. 289 00:24:56,080 --> 00:24:58,980 >> Google Code Search è davvero degno di nota, è uno dei 290 00:24:58,980 --> 00:25:05,720 relativamente poche applicazioni là fuori che consente al pubblico di accedere 291 00:25:05,720 --> 00:25:07,800 suo database utilizzando le espressioni regolari. 292 00:25:07,800 --> 00:25:12,920 Quindi, se si guarda su Google Code Search è possibile trovare il codice 293 00:25:12,920 --> 00:25:16,880 se siete alla ricerca di un esempio di come potrebbe essere utilizzata una funzione, 294 00:25:16,880 --> 00:25:21,610 si può usare una espressione regolare per trovare quella funzione viene utilizzata in tutti i tipi di diversi casi. 295 00:25:21,610 --> 00:25:28,000 Si potrebbe cercare fwrite, e allora si potrebbe cercare la bandiera di scrivere o leggere 296 00:25:28,000 --> 00:25:32,000 se si voleva un esempio di fwrite essere usati in tale caso. 297 00:25:33,530 --> 00:25:37,010 Quindi la stessa cosa qui, e qui ci sono alcuni riferimenti. 298 00:25:37,010 --> 00:25:40,990 Questo sarà disponibile anche online, in modo da andare avanti se 299 00:25:40,990 --> 00:25:45,560 si vuole guardare a Python, grep, Perl - si vuole solo per ottenere un po 'di ispirazione 300 00:25:45,560 --> 00:25:50,650 o se si vuole guardare più alla teoria ecco alcune buone rendessero posti. 301 00:25:50,650 --> 00:25:53,870 Grazie mille. 302 00:25:58,470 --> 00:25:59,910 [CS50.TV]