1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Seminar: uzorak podudaranje s regularnim izrazima] 2 00:00:02,000 --> 00:00:04,000 [John Mussman-Sveučilište Harvard] 3 00:00:04,000 --> 00:00:07,220 [Ovo je CS50.-CS50.TV] 4 00:00:07,780 --> 00:00:11,610 Ok. Pa, svatko dobrodošao. Ovo je CS50 2012. 5 00:00:11,780 --> 00:00:16,610 Moje ime je Ivan, a ja ću se govori danas o regularnim izrazima. 6 00:00:16,610 --> 00:00:22,530 Regularni izrazi je prvenstveno alat, ali također ponekad se koristi 7 00:00:22,530 --> 00:00:28,650 u kodu aktivno bitno kako bi se slagala uzorke i žice. 8 00:00:28,650 --> 00:00:33,800 Dakle, ovdje je web strip iz xkcd. 9 00:00:34,440 --> 00:00:42,370 U ovaj strip je ubojstvo otajstvo gdje je ubojica ima 10 00:00:42,370 --> 00:00:47,860 slijedio nekoga na odmor, a protagonisti moraju 11 00:00:47,860 --> 00:00:52,500 pretraživanje 200 megabajta poruke e-pošte u potrazi za adresom. 12 00:00:52,500 --> 00:00:56,090 I oni su o tome da se kada netko tko zna regularnih izraza - 13 00:00:56,090 --> 00:01:00,550 vjerojatno superjunak - swoops dolje i piše neki kod 14 00:01:00,550 --> 00:01:02,970 i rješava ubojstvu. 15 00:01:02,970 --> 00:01:07,370 Pa vjerojatno da će biti nešto što će biti ovlašten učiniti 16 00:01:07,370 --> 00:01:09,370 Nakon ovog seminara. 17 00:01:09,370 --> 00:01:12,250 Mi samo će dati sažeti uvod u jeziku 18 00:01:12,250 --> 00:01:16,770 i dati vam dovoljno novac za otići nakon više sredstava na svom. 19 00:01:17,680 --> 00:01:21,700 >> Dakle, regularni izrazi izgleda ovako osnovi. 20 00:01:22,930 --> 00:01:25,550 To je uobičajeni izraz u Ruby. 21 00:01:25,550 --> 00:01:29,280 To nije strašno razlikuju po jezicima. 22 00:01:29,690 --> 00:01:37,630 Imamo samo na crtama početi i označiti uobičajeni izraz u Ruby. 23 00:01:37,630 --> 00:01:42,880 A to je uobičajeni izraz tražiti u e-mail adresa uzorak. 24 00:01:42,880 --> 00:01:49,160 Dakle, vidimo na prvi malo izgleda za bilo koji alfanumerički. 25 00:01:50,500 --> 00:01:54,880 To je zato što e-mail adrese se često morati početi s abecednim karaktera. 26 00:01:55,460 --> 00:01:59,330 I onda neki poseban lik slijedi simbola @. 27 00:01:59,330 --> 00:02:03,260 A onda ista stvar za domene. 28 00:02:03,260 --> 00:02:10,030 A onda je između 2 i 4 znaka tražiti. Com,. Net, i tako dalje. 29 00:02:10,850 --> 00:02:13,200 Dakle, to je još jedan primjer regularnog izraza. 30 00:02:13,200 --> 00:02:17,270 Dakle, regularni izrazi su protokoli za pronalaženje obrazaca u tekstu. 31 00:02:17,270 --> 00:02:21,130 Oni su to usporedbe, izbore, i zamjene. 32 00:02:21,690 --> 00:02:27,970 Dakle Treći primjer je pronalaženje sve brojeve telefona koje završavaju s 54 u imeniku. 33 00:02:27,970 --> 00:02:34,360 Dakle, prije nego što David rips up CS50 direktorij smo mogli potražiti 34 00:02:34,360 --> 00:02:40,450 Uzorak u kojem imamo zagrade onda 3 broja onda kraj zagradu, 35 00:02:40,450 --> 00:02:44,070 Još 3 broja, crtica, 2 broja, a zatim 54. 36 00:02:44,070 --> 00:02:48,310 I to bi bilo bitno kako ćemo se s regularni izraz za pretraživanje da. 37 00:02:49,150 --> 00:02:52,960 >> Dakle, tu su - mi smo učinili neke stvari u CS50 da su malo kao što je 38 00:02:52,960 --> 00:02:59,740 regularni izrazi, tako da - primjerice - u dictionary.C datoteku 39 00:02:59,740 --> 00:03:04,720 za provjeru pravopisa set problema možda ste fscanf 40 00:03:04,720 --> 00:03:07,930 čitati u riječi iz rječnika. 41 00:03:07,930 --> 00:03:16,240 A možete vidjeti postotak 45s je u potrazi za niz od 45 znakova. 42 00:03:16,240 --> 00:03:20,020 Dakle, to je nešto kao rudimentaran regularnog izraza. 43 00:03:21,150 --> 00:03:26,060 I možete imati bilo 45 znakova da stane račun unutra 44 00:03:26,060 --> 00:03:28,080 i pokupiti one do. 45 00:03:28,080 --> 00:03:33,480 I onda drugi primjer u najnovijem web programiranja 46 00:03:33,480 --> 00:03:40,760 postavljena u distro kod za PHP zapravo imamo jednostavan regularni izraz. 47 00:03:40,760 --> 00:03:46,790 I ovaj je jednostavno u potrazi za provjeru je li web stranica koja se donosi u 48 00:03:46,790 --> 00:03:51,940 odgovara ni prijavite se ili se registrirajte odjaviti. PHP. 49 00:03:52,220 --> 00:03:57,910 A onda se vraćaju true ili false temelju tog regularnog izraza podudaranja. 50 00:03:59,400 --> 00:04:01,740 >> Dakle, kada ne koristite uobičajeni izraz? 51 00:04:01,740 --> 00:04:04,820 Zašto ste danas ovdje? 52 00:04:05,330 --> 00:04:08,480 Tako da ne želite koristiti regularni izraz kada postoji nešto što 53 00:04:08,480 --> 00:04:11,640 obavlja posao za vas, čak i lakše. 54 00:04:11,640 --> 00:04:15,510 Dakle, XML i HTML su zapravo prilično zahtjevno 55 00:04:15,510 --> 00:04:18,480 napisati regularne izraze za što ćemo vidjeti u malo. 56 00:04:19,110 --> 00:04:23,280 Dakle, postoje posvećena parsera za tim jezicima. 57 00:04:24,170 --> 00:04:30,060 Također morate biti u redu s trgovinskom off i točnost često. 58 00:04:30,060 --> 00:04:36,220 Ako pokušavate - kako smo vidjeli regularni izraz za e-mail adresu, 59 00:04:37,370 --> 00:04:42,590 ali kažu da ste htjeli određenu e-mail adresu i postupno 60 00:04:42,590 --> 00:04:48,570 regularni izraz mogao postati još složeniji jer je postao precizniji. 61 00:04:49,580 --> 00:04:52,260 Tako da će biti jedan trgovina off. 62 00:04:52,260 --> 00:04:55,330 Morate biti sigurni da ste dobro čine s regularni izraz. 63 00:04:55,330 --> 00:04:57,920 Ako znate točno ono što tražite to može učiniti više smisla 64 00:04:57,920 --> 00:05:02,070 staviti u vrijeme i napisati učinkovitiju parser. 65 00:05:02,070 --> 00:05:06,980 I na kraju tu je povijesno pitanje s pravilnosti 66 00:05:06,980 --> 00:05:08,940 izraza i jezika. 67 00:05:08,940 --> 00:05:12,960 Regularni izrazi su zapravo mnogo snažnije od 68 00:05:12,960 --> 00:05:16,450 Regularni izrazi po kažu u formalnom smislu. 69 00:05:17,130 --> 00:05:20,150 >> Dakle, ja ne želim ići predaleko u formalnom teorijom, 70 00:05:20,150 --> 00:05:24,000 ali većina jezici koji smo kod u zapravo nisu redoviti. 71 00:05:24,000 --> 00:05:29,110 I to je razlog zašto regularni izrazi ponekad ne smatraju svi da je siguran. 72 00:05:29,670 --> 00:05:33,150 Tako je u osnovi postoji hijerarhija Chomsky za jezike, 73 00:05:33,150 --> 00:05:38,400 i regularni izrazi su izgraditi korištenjem uniju, ulančavanje, 74 00:05:38,400 --> 00:05:41,810 i rad Kleene zvijezda koje ćemo vidjeti u nekoliko minuta. 75 00:05:43,130 --> 00:05:48,860 Ako ste zainteresirani u teoriji postoji dosta tamo događa ispod haube. 76 00:05:50,360 --> 00:05:55,880 >> Dakle kratku povijest - samo za kontekstu ovdje - redovni seta došao do 77 00:05:55,880 --> 00:05:59,580 u 1950, a zatim smo imali jednostavne urednika da 78 00:05:59,580 --> 00:06:03,300 uključene regularne izraze - samo u potrazi za gudače. 79 00:06:03,570 --> 00:06:09,110 Grep - što je alat naredbenog retka - bio je jedan od prvih 80 00:06:09,110 --> 00:06:14,160 Vrlo popularni alat koji ugrađeni regularnih izraza u 1960. 81 00:06:14,160 --> 00:06:20,560 U 80-tih, Perl sagrađena - je programski jezik koji 82 00:06:20,560 --> 00:06:24,110 uključuje uobičajene izraze vrlo istaknut. 83 00:06:24,550 --> 00:06:30,130 A onda je u novije vrijeme imali smo Perl kompatibilan regularni izraz 84 00:06:30,130 --> 00:06:35,870 Protokoli u osnovi na drugim jezicima koje koriste puno od iste sintakse. 85 00:06:36,630 --> 00:06:39,840 Naravno, najvažniji događaj bio je u 2008 86 00:06:39,840 --> 00:06:43,040 tamo gdje je bio prvi Nacionalni dan regularne izraze, 87 00:06:43,040 --> 00:06:47,350 što vjerujem da je 1. lipnja, ako želite slaviti. 88 00:06:48,430 --> 00:06:50,840 >> Opet, samo malo više teorija ovdje. 89 00:06:52,180 --> 00:06:55,320 Dakle, postoji nekoliko različitih načina gradnje regularnih izraza. 90 00:06:55,950 --> 00:07:02,050 Jedan jednostavan način je da se izgradi izraz koji ćete 91 00:07:02,050 --> 00:07:07,500 pokrenuti na niz tumače - osnovi graditi malo mini-program koji 92 00:07:07,500 --> 00:07:11,870 će analizirati komada nizu i vidjeti, "Oh, to stane regularni izraz ili ne?" 93 00:07:12,250 --> 00:07:14,250 I onda pokrenuti to. 94 00:07:14,250 --> 00:07:17,300 Dakle, ako imate vrlo mali regularni izraz, to je vjerojatno 95 00:07:17,300 --> 00:07:19,380 Najučinkovitiji način da to učinite. 96 00:07:20,090 --> 00:07:25,420 A onda, ako vas - još jedna mogućnost je da bi rekonstruirati 97 00:07:25,420 --> 00:07:30,260 Izraz kao što ide, a to je mogućnost da simuliraju. 98 00:07:30,440 --> 00:07:37,690 A ovi rani pokušaji bili regularni izraz algoritama 99 00:07:37,690 --> 00:07:44,330 relativno jednostavan i relativno brzo, ali nije imala puno fleksibilnosti. 100 00:07:44,330 --> 00:07:47,500 Dakle, učiniti čak i neke od stvari koje ćemo gledati na 101 00:07:47,500 --> 00:07:52,860 Danas smo morali napraviti složeniji regularni izraz 102 00:07:52,860 --> 00:07:56,650 implementacije koji su potencijalno puno sporije, tako da je nešto imati na umu 103 00:07:57,510 --> 00:08:02,920 Tu je i redoviti izraze poricanje napada raznih 104 00:08:02,920 --> 00:08:08,330 da iskoriste potencijal za ovim novijim implementacijama 105 00:08:08,330 --> 00:08:10,930 Regularni izrazi postati vrlo složen. 106 00:08:11,570 --> 00:08:15,650 I na isti način kako smo vidjeli u buffer overflow napada, 107 00:08:15,650 --> 00:08:21,610 imate napade koji rade po izradi rekurzivne petlje da 108 00:08:21,610 --> 00:08:24,400 prekoračenje kapacitet memorije. 109 00:08:24,780 --> 00:08:29,540 I usput Regexen je jedan od službenih množine u regularnom izrazu 110 00:08:29,540 --> 00:08:32,890 Analogijom volova u anglosaksonskom. 111 00:08:33,500 --> 00:08:40,169 >> Ok, tako da Python knjižnica mnogi od vas ovdje osobno ima Macove, 112 00:08:40,169 --> 00:08:43,860 tako da zapravo možete povući ovaj gore na zaslonu. 113 00:08:43,860 --> 00:08:47,480 Regularni izrazi su ugrađeni u Pythonu. 114 00:08:48,070 --> 00:08:53,020 I tako Python je predinstaliran na Macovima i također dostupan online na ovom linku. 115 00:08:53,770 --> 00:08:57,350 Dakle, ako gledate možete pauzirati i provjerite imate li Python 116 00:08:58,080 --> 00:09:00,170 što ćemo igrati ovdje. 117 00:09:00,780 --> 00:09:06,420 Postoji upotrebu online, tako da ako samo upišite Python u računalo 118 00:09:06,420 --> 00:09:10,500 vidjet ćete da je verzija dolazi u terminalu. 119 00:09:11,070 --> 00:09:17,720 Tako sam pod uvjetom link na priručniku za Verziju 2. Python, kao i varati list. 120 00:09:17,720 --> 00:09:23,100 Postoji verzija 3 Python, ali vaš Mac ne nužno 121 00:09:23,100 --> 00:09:25,130 dolaze predinstalirane s tim. 122 00:09:25,130 --> 00:09:27,360 Dakle, nije strašno razlikuju. 123 00:09:27,360 --> 00:09:33,270 Ok, tako da neke osnove koristeći regularne izraze u Pythonu. 124 00:09:34,080 --> 00:09:42,650 >> Dakle, ovdje sam koristio vrlo jednostavan izraz, pa mi je Python uvoz re 125 00:09:43,750 --> 00:09:47,070 , a zatim je rezultat re.search. 126 00:09:47,070 --> 00:09:49,910 I traži traje 2 argumente. 127 00:09:49,910 --> 00:09:56,040 Prvi je regularni izraz, a drugi je tekst 128 00:09:56,040 --> 00:09:58,290 string ili želite analizirati. 129 00:09:58,290 --> 00:10:01,210 A onda sam isprintati na result.group. 130 00:10:01,580 --> 00:10:05,860 Dakle, to su dvije osnovne funkcije ćemo vidjeti danas 131 00:10:06,790 --> 00:10:10,170 u učenju o regularnim izrazima. 132 00:10:10,170 --> 00:10:12,880 Dakle, samo što se razbije to uobičajeni izraz ovdje 133 00:10:12,880 --> 00:10:21,770 h, a zatim \ w a zatim m kako \ w jednostavno prihvati bilo slovo tamo. 134 00:10:21,850 --> 00:10:26,820 Dakle ovdje smo u potrazi za "h", a zatim još jedan abecedni znak 135 00:10:26,820 --> 00:10:30,060 a zatim m, pa evo da bi se slagala pršut 136 00:10:30,060 --> 00:10:34,480 u, "Abraham Lincoln i pršut sendviči." 137 00:10:35,040 --> 00:10:37,150 To je rezultat toj skupini. 138 00:10:37,680 --> 00:10:43,130 Još jedna stvar koju možemo učiniti je koristiti naše prije nizove teksta u Pythonu. 139 00:10:43,130 --> 00:10:46,220 Dakle, mislim da ću ići naprijed i povući da se ovdje. 140 00:10:46,220 --> 00:10:49,210 Python uvoz ponovno. 141 00:10:50,070 --> 00:10:54,000 I ako bih napraviti istu stvar - recimo tekst, 142 00:10:55,390 --> 00:11:00,800 "Abraham," neka nam uvećali - tamo idemo. 143 00:11:01,610 --> 00:11:06,430 Tekst je, "Abraham jede šunku." 144 00:11:07,460 --> 00:11:15,260 Ok, a zatim dovesti = re.search. 145 00:11:16,260 --> 00:11:22,020 I onda naš izraz može biti h, a onda ću napraviti dot metara. 146 00:11:22,020 --> 00:11:26,280 Dakle dot traje samo bilo znak koji nije nova linija, uključujući brojeve, 147 00:11:26,280 --> 00:11:28,650 postotnih znakovi, bilo što slično. 148 00:11:28,650 --> 00:11:38,030 I onda tekst - bum - i onda result.group--Da. 149 00:11:38,030 --> 00:11:41,820 Dakle, to je samo kako provesti osnovnu funkcionalnost ovdje. 150 00:11:42,300 --> 00:11:55,110 Ako smo imali taj tekst prsten - da je luda teksta - uključeno kažu puno kose crte 151 00:11:55,110 --> 00:12:01,180 i žice unutar i stvari koje bi mogle izgledati kao izlazni nizovi, 152 00:12:01,180 --> 00:12:08,480 onda vjerojatno želite koristiti sirovu unos teksta kako bi bili sigurni da je prihvaćen. 153 00:12:08,480 --> 00:12:14,120 I to samo izgleda kao da je. 154 00:12:14,120 --> 00:12:17,810 Dakle, ako smo bili u potrazi za svaku od njih tamo ne bismo trebali naći ništa. 155 00:12:19,070 --> 00:12:21,680 No, to je način na koji će to provesti, neposredno prije niz 156 00:12:21,680 --> 00:12:24,990 regularni izraz stavite slovo R. 157 00:12:26,150 --> 00:12:30,260 >> Ok, pa neka nas zadržati ide. 158 00:12:30,260 --> 00:12:33,730 U redu - pa pogledajmo nekoliko ponavljaju obrasce ovdje. 159 00:12:34,750 --> 00:12:39,150 Dakle, jedna stvar koju želite učiniti je ponavljati stvari 160 00:12:40,040 --> 00:12:42,480 kao da ste u potrazi kroz tekst. 161 00:12:42,480 --> 00:12:48,300 Tako da to slijedi bilo koji broj b - što učiniti ab *. 162 00:12:48,630 --> 00:12:51,620 A onda postoji niz drugih pravila previše. 163 00:12:51,620 --> 00:12:54,380 A možete gledati sve ove gore, samo ću pokrenuti kroz neke od 164 00:12:54,380 --> 00:12:57,630 Najčešće korišteni sebe. 165 00:12:57,630 --> 00:13:03,920 Tako ab + je zatim bilo N veći od 0 od b. 166 00:13:04,510 --> 00:13:08,000 ab? je zatim 0 ili 1. b. 167 00:13:09,190 --> 00:13:18,580 ab {N} je slijedi N iz B i tako dalje. 168 00:13:18,580 --> 00:13:22,820 Ako imate 2 brojeve u vitičastim zagradama ste navodeći niz 169 00:13:23,300 --> 00:13:25,440 koji se može eventualno odgovara. 170 00:13:26,390 --> 00:13:30,420 Tako ćemo pogledati još na par ponavljaju obrasce u minutu. 171 00:13:31,960 --> 00:13:42,300 Dakle, dvije stvari koje trebate imati na umu prilikom korištenja ove uzorak podudaranja alate ovdje. 172 00:13:42,300 --> 00:13:52,120 Tako kažu želimo gledati na hm za "Abraham Lincoln napravio sendviče sa šunkom." 173 00:13:52,120 --> 00:13:55,230 Tako sam promijenio Abrahama Lincolna ime Abrahamu. 174 00:13:55,230 --> 00:14:00,290 I sad smo u potrazi za ono što se vratio ovim funkciju pretraživanja, 175 00:14:00,290 --> 00:14:03,270 i to samo vraća pršut u ovom slučaju. 176 00:14:03,620 --> 00:14:08,080 I to ne zato da traži jednostavno prirodno vodi lijevu najviše red. 177 00:14:08,080 --> 00:14:12,130 I sve uobičajene izraze, osim ako nije drukčije će to učiniti. 178 00:14:12,830 --> 00:14:18,880 Ako smo željeli pronaći sve postoji funkcija za to - naći sve. 179 00:14:18,880 --> 00:14:35,100 Dakle, samo da bi mogao izgledati sve = re.findall ('h.m', tekst) 180 00:14:35,100 --> 00:14:44,540 a zatim all.group (). 181 00:14:44,540 --> 00:14:51,040 Svi proizvodi i pršut i šunku, u tom slučaju obje žice u svakom Abrahama šunke. 182 00:14:51,610 --> 00:14:55,110 Dakle, to je još jedna mogućnost. 183 00:14:56,250 --> 00:15:06,940 >> Izvrsno. Druga stvar koju treba imati na umu je da regularni izrazi se najveći intuitivno. 184 00:15:06,940 --> 00:15:09,520 Neka nam pogled na ovom primjeru. 185 00:15:10,200 --> 00:15:16,070 Napravili smo tu lijevu najviše potragu ovdje, a onda sam pokušao veći pretragu 186 00:15:16,070 --> 00:15:18,800 pomoću Kleene zvijezda operatera. 187 00:15:18,800 --> 00:15:24,180 Tako je za "Abraham Lincoln napravio sendviče sa šunkom," a ja sam samo dobio natrag 188 00:15:24,180 --> 00:15:26,280 m kao rezultat. 189 00:15:26,280 --> 00:15:31,670 Razlog za to je pogreška bila što sam mogao uzeti bilo koji broj 190 00:15:31,670 --> 00:15:36,140 h je zato što nisam ništa specificirati da ide u između H, M. 191 00:15:36,140 --> 00:15:42,010 Jedini primjer koji je imao tu m - jedini primjeri tamo s m u njemu 192 00:15:42,010 --> 00:15:46,220 i bilo koji broj H bili samo string m. 193 00:15:46,490 --> 00:15:51,850 Tada sam ga ponovno pokušao, rekao sam: "Dobro, neka nam se stvarni najveću skupinu ovdje." 194 00:15:51,850 --> 00:15:59,670 A onda sam h. * M, tako da je samo bilo koji vraća broj znakova između H, M. 195 00:16:00,280 --> 00:16:02,950 A ako ste tek počinje out i razmišljanja, "Oh, ok, ali to će 196 00:16:02,950 --> 00:16:11,560 daj mi pršut, "to je zapravo sve što se iz sata u Abraham Lincoln 197 00:16:11,560 --> 00:16:13,690 pa sve do kraja šunke. 198 00:16:14,040 --> 00:16:18,110 To je pohlepna, ona vidi h - sve je to drugi tekst - m, 199 00:16:18,110 --> 00:16:21,280 i to je ono što je potrebno rezervirati 200 00:16:22,060 --> 00:16:27,480 To je posebno nečuven - to je značajka možemo također 201 00:16:27,480 --> 00:16:30,670 navesti za to ne biti pohlepan pomoću druge funkcije. 202 00:16:31,480 --> 00:16:34,490 No, to je nešto što moramo imati na umu posebno 203 00:16:34,490 --> 00:16:38,720 kada se gleda na HTML tekst, što je jedan od razloga da 204 00:16:38,720 --> 00:16:41,500 Regularni izrazi su teško za HTML. 205 00:16:42,460 --> 00:16:46,310 Jer ako imate otvorenu HTML oznake i onda puno stvari u sredini 206 00:16:46,310 --> 00:16:49,820 a onda neka druga HTML zatvorena oznaku mnogo kasnije u programu, 207 00:16:49,820 --> 00:16:55,420 ste upravo pojeli puno HTML koda eventualno greškom. 208 00:16:56,200 --> 00:17:01,840 >> Sva prava - tako da više posebnih znakova, kao i mnogim drugim jezicima, 209 00:17:01,840 --> 00:17:04,780 možemo pobjeći pomoću crtu. 210 00:17:04,780 --> 00:17:10,329 Dakle, možemo koristiti točku navesti bilo koji znak osim za novu liniju. 211 00:17:10,329 --> 00:17:14,550 Možemo koristiti w bijeg navesti bilo slovo. 212 00:17:14,550 --> 00:17:20,329 A po analogiji bijega d za svaki cijeli broj - brojčana znakova. 213 00:17:20,630 --> 00:17:27,440 Možemo navesti - možemo koristiti zagrade navesti srodne izraze. 214 00:17:27,440 --> 00:17:30,970 Dakle, to će prihvatiti a, b, ili c. 215 00:17:31,320 --> 00:17:37,000 I mi također može odrediti ili opcije za bilo A ili B. 216 00:17:37,000 --> 00:17:41,110 Na primjer - ako smo u potrazi za više mogućnosti 217 00:17:41,110 --> 00:17:44,940 u zagradama smo mogli koristiti ili operatera kao u - 218 00:17:44,940 --> 00:17:52,480 pa neka nam se vratiti na ovaj primjer ovdje. 219 00:17:53,000 --> 00:17:59,790 I sada uzmimo - vratimo se na ovaj primjer ovdje, a zatim 220 00:17:59,790 --> 00:18:12,290 potrajati AE - pa to bi se trebali vratiti - Mislim da je to još uvijek Abraham. 221 00:18:12,290 --> 00:18:17,410 Dakle, to - ako smo učiniti sve - super. 222 00:18:17,410 --> 00:18:22,700 Pa neka nam ažurirati tekst ovdje. 223 00:18:22,700 --> 00:18:34,690 "Abraham jede šunku, a njegov rubljenja -. Dok Hemming" Izvrsno. 224 00:18:44,090 --> 00:18:47,330 Sve. Izvrsno. Sada smo dobili pršut, šunka, i skuta. 225 00:18:48,510 --> 00:18:59,370 Dok Hemming - zuji dok mu - dok je pjevušio s njim kašljucati. Izvrsno. 226 00:19:00,350 --> 00:19:03,250 Ista stvar. 227 00:19:03,820 --> 00:19:09,180 Sada sve se vraća još uvijek samo šunka, šunka, i rub bez dizanja na Hum ili na njega. 228 00:19:09,940 --> 00:19:22,600 Sjajno - Pa što ako smo htjeli gledati na bilo koji - kako bismo mogli napraviti 229 00:19:23,510 --> 00:19:33,810 njega ili - mi ćemo se vratiti na to. 230 00:19:34,810 --> 00:19:45,760 Ok - tako da - sve u redu - na mjestima također možete koristiti znak za umetanje ili znak dolara 231 00:19:45,760 --> 00:19:49,350 navesti da ste u potrazi za nečim na početku ili na kraju niza. 232 00:19:50,260 --> 00:19:52,260 Ili početak ili kraj riječi. 233 00:19:52,400 --> 00:19:54,470 To je jedan način da se to koristiti. 234 00:19:55,630 --> 00:20:01,160 >> Ok - pa neka nam se poigrati s nešto većim blok teksta. 235 00:20:03,950 --> 00:20:08,310 Recimo ovaj redak ovdje - ovu izjavu ovdje. 236 00:20:08,310 --> 00:20:11,360 Snaga regularnog izraza je da oni mogu odrediti obrasce 237 00:20:11,360 --> 00:20:13,390 ne samo fiksne znakove. 238 00:20:14,900 --> 00:20:18,790 Učinimo - nazovimo ovaj blok. 239 00:20:22,400 --> 00:20:27,110 Onda ćemo čitati sve to u. 240 00:20:28,890 --> 00:20:50,820 I onda su - da nas čine sve =, tako što su neke stvari koje smo mogli tražiti ovdje profitabilno? 241 00:20:50,820 --> 00:20:54,070 Mogli bismo tražiti izraz uho. 242 00:20:55,050 --> 00:21:01,520 Nije vrlo zanimljiva. Kako o tome? Vidjet ćemo što će se dogoditi. 243 00:21:03,710 --> 00:21:05,710 Dao sam ga problem. 244 00:21:06,380 --> 00:21:10,750 Dakle, bilo koji broj stvari prije ponovnog i sve. 245 00:21:10,750 --> 00:21:15,630 Tako da bi trebao vratiti sve, od početka do svih istraživanja možda par puta. 246 00:21:18,800 --> 00:21:21,970 I onda ovdje imamo moć regularnih izraza je da oni 247 00:21:21,970 --> 00:21:24,900 Možete odrediti obrasce ne samo likovi su ovdje. 248 00:21:24,900 --> 00:21:28,510 Dakle, sve do konačnog ponovnog, počeo je s lijeve strane, a najviše je pohlepni. 249 00:21:30,710 --> 00:21:32,710 Neka nam vidjeti - što još možemo tražiti. 250 00:21:32,710 --> 00:21:39,860 Valjda jednu stvar, ako ste bili zainteresirani u potrazi za zamjenice ona i on, 251 00:21:39,860 --> 00:21:44,600 možete provjeriti i biti jednak 0 ili 1 252 00:21:44,600 --> 00:21:49,710 , a izraz je, a to vjerojatno neće vratiti - 253 00:21:49,710 --> 00:21:58,020 Oh, mislim da se vratio jer mi se gleda na snagu, taj dan, ovdje su. 254 00:22:00,590 --> 00:22:06,270 Pokušajmo navodeći da mora doći na početku nečega. 255 00:22:06,640 --> 00:22:09,530 Neka nam vidjeti ako to padne off. 256 00:22:09,530 --> 00:22:19,630 Dakle, što možemo učiniti masnoća, a ne dobivamo ništa, jer je i on 257 00:22:19,630 --> 00:22:22,870 se ne javljaju u tom izrazu. 258 00:22:24,960 --> 00:22:30,410 Izvrsno. Ok - pa natrag na mačka ovdje. 259 00:22:30,410 --> 00:22:35,720 Dakle kompliciraniji način je ranjavanje mozak. 260 00:22:35,720 --> 00:22:40,500 Dakle, to je razlog zašto mi koristimo uobičajene izraze kako bi izbjegli ove probleme. 261 00:22:40,820 --> 00:22:43,520 >> Dakle, ovdje su neke druge korisne načina možete poigrati s. 262 00:22:43,520 --> 00:22:50,290 Mi smo gledali na traženju i danas, ali također može koristiti meča, Split, findall, i grupe. 263 00:22:50,290 --> 00:22:53,970 Dakle druge cool stvari koje možete učiniti s regularnim izrazima osim samo 264 00:22:53,970 --> 00:22:58,870 u potrazi za uzorke uzima uzorak i drži sve utakmice - 265 00:22:58,870 --> 00:23:02,530 njegove varijable - a zatim pomoću onih u kodu kasnije. 266 00:23:02,850 --> 00:23:05,980 To može biti vrlo korisno. Ostale stvari koje se mogu brojati. 267 00:23:05,980 --> 00:23:11,720 Dakle, možemo računati broj instanci regularni izraz uzorak, 268 00:23:11,720 --> 00:23:13,960 a to je ono što možemo koristiti grupe za. 269 00:23:13,960 --> 00:23:17,550 I drugi načini, kao dobro su moguće. 270 00:23:18,040 --> 00:23:22,980 Dakle, ja samo želim govoriti malo više o drugim načinima na koje možete koristiti regularne izraze. 271 00:23:22,980 --> 00:23:29,100 >> Dakle, još jedan napredni program je fuzzy podudaranja. 272 00:23:29,100 --> 00:23:33,450 Dakle, ako ste u potrazi za tekst za izražavanje, Julije Cezar, 273 00:23:33,450 --> 00:23:37,740 a vidiš ni Gaj Julije Cezar ili ime Julije Cezar u drugim jezicima, 274 00:23:37,740 --> 00:23:44,400 onda možda želite dodijeliti neku težinu tim vrijednostima. 275 00:23:44,400 --> 00:23:48,930 A ako je dovoljno blizu - ako se prijeđe određeni prag - onda želite 276 00:23:48,930 --> 00:23:50,860 biti u mogućnosti prihvatiti Julija Cezara. 277 00:23:50,860 --> 00:24:00,580 Dakle, postoji nekoliko različitih implementacija za to u nekoliko drugih jezika, kao dobro. 278 00:24:02,580 --> 00:24:08,420 Ovdje su neke druge alate, Regex Pal - zgodan mali app za on-line 279 00:24:08,420 --> 00:24:12,190 provjeriti da li su vaše uobičajene izraze sastoji ispravno. 280 00:24:12,190 --> 00:24:18,500 Tu su i samostalne alate koje možete pokrenuti na računalu 281 00:24:18,500 --> 00:24:22,100 kao što su Ultra Pico, i kao i samo kuharica. 282 00:24:22,100 --> 00:24:25,410 Dakle, ako se radi projekt koji uključuje tonu regularnim izrazima 283 00:24:25,410 --> 00:24:29,810 ovo je vjerojatno mjesto za izlazak izvan dosega danas. 284 00:24:31,520 --> 00:24:35,770 I onda samo dati vam osjećaj kako je zajednička 285 00:24:35,770 --> 00:24:44,090 postoji u Unix grep, Perl ima izgrađen-in, a C je pcre za C. 286 00:24:44,090 --> 00:24:48,890 A onda svi ti drugi jezici imaju redovite izraz pakete 287 00:24:48,890 --> 00:24:52,020 koji rade s gotovo isti sintaksu smo dobili okus danas. 288 00:24:52,020 --> 00:24:54,790 PHP, Java, Ruby, i tako dalje. 289 00:24:56,080 --> 00:24:58,980 >> Google Code Search je zapravo vrijedno spomena, to je jedan od 290 00:24:58,980 --> 00:25:05,720 relativno mali broj aplikacija vani koji omogućuje javnosti za pristup 291 00:25:05,720 --> 00:25:07,800 Njegova baza podataka pomoću regularnih izraza. 292 00:25:07,800 --> 00:25:12,920 Dakle, ako pogledate na Google Code Search možete pronaći kod 293 00:25:12,920 --> 00:25:16,880 Ako ste u potrazi za primjer kako se funkcija može se koristiti, 294 00:25:16,880 --> 00:25:21,610 možete koristiti uobičajeni izraz pronaći tu funkciju koja se koristi u svim vrstama različitih slučajeva. 295 00:25:21,610 --> 00:25:28,000 Ti bi mogao tražiti fwrite, a onda ste mogli tražiti zastavom pisati ili čitati 296 00:25:28,000 --> 00:25:32,000 ako ste htjeli primjer fwrite se koristi u tom slučaju. 297 00:25:33,530 --> 00:25:37,010 Dakle, ista stvar postoji, a ovdje su neke reference. 298 00:25:37,010 --> 00:25:40,990 To će biti dostupan online, kao i, tako da ide prema naprijed, ako 299 00:25:40,990 --> 00:25:45,560 želite gledati na Python, Perl, grep - samo želite da biste dobili neke inspiracije 300 00:25:45,560 --> 00:25:50,650 ili ako želite pogledati više na teoriji ovdje su neke dobre jumping off mjesta. 301 00:25:50,650 --> 00:25:53,870 Puno hvala. 302 00:25:58,470 --> 00:25:59,910 [CS50.TV]