1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Seminar: Iskanje vzorcev regularnih izrazov] 2 00:00:02,000 --> 00:00:04,000 [John Mussman-Harvard University] 3 00:00:04,000 --> 00:00:07,220 [To je CS50.-CS50.TV] 4 00:00:07,780 --> 00:00:11,610 Ok. No, dobrodošli vsi. To je CS50 2012. 5 00:00:11,780 --> 00:00:16,610 Moje ime je John, in bom lahko danes govorimo o regularnih izrazih. 6 00:00:16,610 --> 00:00:22,530 Regularni izrazi predvsem orodje, ampak tudi včasih uporablja 7 00:00:22,530 --> 00:00:28,650 v kodi aktivno v bistvu ujemajo vzorce in godala. 8 00:00:28,650 --> 00:00:33,800 Torej, tukaj je spletni strip iz xkcd. 9 00:00:34,440 --> 00:00:42,370 V tej stripe je umor skrivnost, kjer je morilec 10 00:00:42,370 --> 00:00:47,860 sledijo nekoga na dopustu, in zamišljajo, da 11 00:00:47,860 --> 00:00:52,500 iskanje po 200 megabajtov elektronske pošte iščejo za naslov. 12 00:00:52,500 --> 00:00:56,090 In so na tem, da se, ko nekdo, ki ve, regularne izraze - 13 00:00:56,090 --> 00:01:00,550 predvidoma superheroj - swoops navzdol in piše nekaj kode 14 00:01:00,550 --> 00:01:02,970 in rešuje umor skrivnost. 15 00:01:02,970 --> 00:01:07,370 Torej, verjetno, da bo nekaj, kar vas bo pooblaščena za to 16 00:01:07,370 --> 00:01:09,370 Po tem seminarju. 17 00:01:09,370 --> 00:01:12,250 Mi smo le, da bo zagotoviti kratek in jedrnat uvod v jezik 18 00:01:12,250 --> 00:01:16,770 in vam dal dovolj sredstva, da gredo po več sredstev na svoje. 19 00:01:17,680 --> 00:01:21,700 >> Torej, regularni izrazi pogledati v bistvu takole. 20 00:01:22,930 --> 00:01:25,550 To je regularni izraz v Ruby. 21 00:01:25,550 --> 00:01:29,280 Ni hudo medsebojno razlikujejo jezikov. 22 00:01:29,690 --> 00:01:37,630 Imamo samo na poševnico začeti in označite regularnega izraza v Ruby. 23 00:01:37,630 --> 00:01:42,880 In to je regularni izraz za iskanje v e-poštni naslov vzorcu. 24 00:01:42,880 --> 00:01:49,160 Tako vidimo na prvi bit išče vse alfanumerični. 25 00:01:50,500 --> 00:01:54,880 To je zato, ker so e-poštni naslovi pogosto začnejo s črko. 26 00:01:55,460 --> 00:01:59,330 In potem vsak poseben znak sledi znakom @. 27 00:01:59,330 --> 00:02:03,260 In potem isto stvar za domensko ime. 28 00:02:03,260 --> 00:02:10,030 Nato pa med 2 in 4 znake za iskanje. Com,. Net, in tako naprej. 29 00:02:10,850 --> 00:02:13,200 Tako da je še en primer redne izražanja. 30 00:02:13,200 --> 00:02:17,270 Torej, regularni izrazi so protokoli za iskanje vzorcem; v besedilu. 31 00:02:17,270 --> 00:02:21,130 Delajo primerjave, izbor, in zamenjav. 32 00:02:21,690 --> 00:02:27,970 Torej Tretji primer je najti vse telefonske številke, ki se končajo v 54 v imenik. 33 00:02:27,970 --> 00:02:34,360 Torej, preden David prask gor CS50 imenik lahko iščemo 34 00:02:34,360 --> 00:02:40,450 vzorec, kjer imamo oklepaje nato 3 številke potem konec oklepajev, 35 00:02:40,450 --> 00:02:44,070 Več številke 3, črtica, 2 številki, nato pa 54. 36 00:02:44,070 --> 00:02:48,310 In to bi bilo bistveno, kako smo prišli do regularni izraz za iskanje za to. 37 00:02:49,150 --> 00:02:52,960 >> Torej obstaja -, da smo naredili nekaj stvari v CS50, da so malce podobna 38 00:02:52,960 --> 00:02:59,740 regularni izrazi, tako da - na primer - v dictionary.C datoteke 39 00:02:59,740 --> 00:03:04,720 za preverjanje črkovanja problem niz lahko ste uporabili fscanf 40 00:03:04,720 --> 00:03:07,930 brati v besedo iz slovarja. 41 00:03:07,930 --> 00:03:16,240 In si lahko ogledate odstotek 45s išče niz 45 znakov. 42 00:03:16,240 --> 00:03:20,020 Torej je nekako kot osnovno regularnega izraza. 43 00:03:21,150 --> 00:03:26,060 In lahko imate 45 znakov, ki ustrezajo zakona tam 44 00:03:26,060 --> 00:03:28,080 in izbrati tiste gor. 45 00:03:28,080 --> 00:03:33,480 In potem drugi primer v zadnjem programskem problem web 46 00:03:33,480 --> 00:03:40,760 postavljena v distro kodo za php smo dejansko imajo preprosto regularni izraz. 47 00:03:40,760 --> 00:03:46,790 In to je samo preprosto videti, da preveri, če je spletna stran, ki je minilo v 48 00:03:46,790 --> 00:03:51,940 ujema bodisi prijavi ali odjavi registrirati. PHP. 49 00:03:52,220 --> 00:03:57,910 In potem vrne resnična ali neresnična, ki temelji na tem regularni izraz ujemanje. 50 00:03:59,400 --> 00:04:01,740 >> Torej, ko boste uporabili regularni izraz? 51 00:04:01,740 --> 00:04:04,820 Zakaj ste danes tukaj? 52 00:04:05,330 --> 00:04:08,480 Torej ne želite uporabiti regularni izraz, če obstaja nekaj, kar 53 00:04:08,480 --> 00:04:11,640 ne dela za vas še bolj enostavno. 54 00:04:11,640 --> 00:04:15,510 Torej, XML in HTML so dejansko zelo zapleteno 55 00:04:15,510 --> 00:04:18,480 pisati regularne izraze za, kot bomo videli v malo. 56 00:04:19,110 --> 00:04:23,280 Torej obstajajo namenske razpoznavalniki za te jezike. 57 00:04:24,170 --> 00:04:30,060 Prav tako morajo biti v redu s kompromisi in točnosti pogosto. 58 00:04:30,060 --> 00:04:36,220 Če se potrudiš - tako smo videli regularni izraz za e-poštni naslov, 59 00:04:37,370 --> 00:04:42,590 ampak pravijo, da je želel poseben e-poštni naslov in postopoma 60 00:04:42,590 --> 00:04:48,570 regularni izraz morda postalo bolj zapleteno, kot je postalo bolj natančno. 61 00:04:49,580 --> 00:04:52,260 Tako da bi bilo eno kompromis. 62 00:04:52,260 --> 00:04:55,330 Moraš biti prepričani, da ste prav tako z redno izražanja. 63 00:04:55,330 --> 00:04:57,920 Če veste, kaj iščete bi bilo bolj smiselno, 64 00:04:57,920 --> 00:05:02,070 postaviti v čas in napisati bolj učinkovito parser. 65 00:05:02,070 --> 00:05:06,980 In končno je zgodovinski problem z pravilnosti 66 00:05:06,980 --> 00:05:08,940 izrazov in jezikov. 67 00:05:08,940 --> 00:05:12,960 Regularni izrazi so dejansko veliko močnejša od 68 00:05:12,960 --> 00:05:16,450 regularni izrazi na pravijo v formalnem smislu. 69 00:05:17,130 --> 00:05:20,150 >> Torej, ne želim iti predaleč v formalno teorijo, 70 00:05:20,150 --> 00:05:24,000 vendar je večina jezikov, ki smo koda v resnici niso pravilne. 71 00:05:24,000 --> 00:05:29,110 In to je razlog, zakaj regularni izrazi se včasih ne šteje vse, da varno. 72 00:05:29,670 --> 00:05:33,150 Torej v bistvu je Chomsky hierarhija za jezike, 73 00:05:33,150 --> 00:05:38,400 in so regularni izrazi zgraditi z unijo, združevanje, 74 00:05:38,400 --> 00:05:41,810 in delovanje Kleene zvezda, da bomo videli v nekaj minutah. 75 00:05:43,130 --> 00:05:48,860 Če vas zanima v teoriji je zelo veliko dogaja tam pod pokrovom. 76 00:05:50,360 --> 00:05:55,880 >> Tako kratko zgodovino - samo za kontekst tukaj - redna kompleti prišel gor 77 00:05:55,880 --> 00:05:59,580 leta 1950, nato pa smo imeli preproste urednike, da 78 00:05:59,580 --> 00:06:03,300 vključiti regularne izraze - samo iskanje nizov. 79 00:06:03,570 --> 00:06:09,110 Grep - ki je orodje ukazne vrstice - je bila ena izmed prvih 80 00:06:09,110 --> 00:06:14,160 Zelo priljubljena orodja, da vgrajeni regularne izraze v 1960. 81 00:06:14,160 --> 00:06:20,560 V 80-ih je bil Perl zgrajena - je programski jezik, ki 82 00:06:20,560 --> 00:06:24,110 vključuje regularne izraze zelo vidno. 83 00:06:24,550 --> 00:06:30,130 In potem še pred kratkim smo imeli Perl združljiv regularni izraz 84 00:06:30,130 --> 00:06:35,870 protokoli v bistvu v drugih jezikih, ki uporabljajo veliko enake sintakse. 85 00:06:36,630 --> 00:06:39,840 Seveda je najbolj pomemben dogodek leta 2008 86 00:06:39,840 --> 00:06:43,040 kjer je bil prvi dan državnosti regularnih izrazov, 87 00:06:43,040 --> 00:06:47,350 kar menim, da je 1. junij, če želite, da proslavimo. 88 00:06:48,430 --> 00:06:50,840 >> Še enkrat, samo malo bolj teorija tukaj. 89 00:06:52,180 --> 00:06:55,320 Torej, obstaja nekaj različnih načinov gradnje regularne izraze. 90 00:06:55,950 --> 00:07:02,050 En preprost način je, da zgraditi izraz, ki boste 91 00:07:02,050 --> 00:07:07,500 teči na vrvico razlagajo - v bistvu zgraditi malo mini program, ki 92 00:07:07,500 --> 00:07:11,870 bo analizirala kosov niz in videli, "Oh, ta ustreza regularni izraz, ali ne?" 93 00:07:12,250 --> 00:07:14,250 In nato zaženite da. 94 00:07:14,250 --> 00:07:17,300 Torej, če imate zelo majhno regularni izraz, to je verjetno 95 00:07:17,300 --> 00:07:19,380 Najbolj učinkovit način, da to storite. 96 00:07:20,090 --> 00:07:25,420 In potem, če vas - druga možnost je, da obnovi 97 00:07:25,420 --> 00:07:30,260 izraz, kot si, in da je simulirajo možnost. 98 00:07:30,440 --> 00:07:37,690 In teh zgodnjih poskusov na rednih algoritmov izražanja bilo 99 00:07:37,690 --> 00:07:44,330 relativno enostaven in relativno hitro, vendar niso imeli veliko fleksibilnost. 100 00:07:44,330 --> 00:07:47,500 Torej, da naredimo še nekaj stvari, da bomo pogled na 101 00:07:47,500 --> 00:07:52,860 Danes smo morali narediti bolj zapleteno regularni izraz 102 00:07:52,860 --> 00:07:56,650 izvedb, ki so potencialno veliko počasneje, tako da je nekaj imeti v mislih 103 00:07:57,510 --> 00:08:02,920 Tam je tudi redna izrazi zanikanje napad sorte 104 00:08:02,920 --> 00:08:08,330 da bi izkoristili potencial za teh novih izvedb 105 00:08:08,330 --> 00:08:10,930 regularni izrazi, da je postala zelo zapletena. 106 00:08:11,570 --> 00:08:15,650 In v skoraj istem smislu, da smo videli v buffer overflow napadi, 107 00:08:15,650 --> 00:08:21,610 imate napade, ki delujejo pod imenom česar rekurzivnih zank, 108 00:08:21,610 --> 00:08:24,400 Prekoračitev zmogljivost pomnilnika. 109 00:08:24,780 --> 00:08:29,540 In mimogrede Regexen je eden od uradnih množinah redne izražanja 110 00:08:29,540 --> 00:08:32,890 po analogiji volov v Anglo-Saxon. 111 00:08:33,500 --> 00:08:40,169 >> Ok, tako da je knjižnica Python mnogi od vas tu v živo imajo Mace, 112 00:08:40,169 --> 00:08:43,860 tako da lahko dejansko to uspe na zaslonu. 113 00:08:43,860 --> 00:08:47,480 Regularni izrazi so vgrajeni v Python. 114 00:08:48,070 --> 00:08:53,020 In tako je Python naložene v Mac in voljo tudi na spletu na tej povezavi. 115 00:08:53,770 --> 00:08:57,350 Torej, če ste gledali ste lahko ustavite in poskrbite, da imate Python 116 00:08:58,080 --> 00:09:00,170 kot smo igrati tukaj. 117 00:09:00,780 --> 00:09:06,420 Obstaja elektronski priročnik, tako da če vpišete Python v računalnik 118 00:09:06,420 --> 00:09:10,500 boste videli, da je verzija v terminalu. 119 00:09:11,070 --> 00:09:17,720 Zato sem dala povezavo do priročnika za različico 2 Python, kakor tudi goljufija stanja. 120 00:09:17,720 --> 00:09:23,100 Na voljo je različica 3 Python, vendar vaš Mac ni nujno 121 00:09:23,100 --> 00:09:25,130 prihajajo z ki prednaložena. 122 00:09:25,130 --> 00:09:27,360 Torej ni strašno drugačen. 123 00:09:27,360 --> 00:09:33,270 Ok, nekaj osnov uporabe regularnih izrazov v Pythonu. 124 00:09:34,080 --> 00:09:42,650 >> Torej, tukaj sem uporabil zelo preprost izraz, zato sem Python uvozni re 125 00:09:43,750 --> 00:09:47,070 in potem je rezultat re.search. 126 00:09:47,070 --> 00:09:49,910 In iskanje traja 2 argumente. 127 00:09:49,910 --> 00:09:56,040 Prvi je regularni izraz, drugi pa je besedilo 128 00:09:56,040 --> 00:09:58,290 ali niz želite analizirati. 129 00:09:58,290 --> 00:10:01,210 In potem sem se natisne na result.group. 130 00:10:01,580 --> 00:10:05,860 Torej, to sta 2 osnovne funkcije, ki jih bomo videli danes 131 00:10:06,790 --> 00:10:10,170 pri učenju o regularnih izrazih. 132 00:10:10,170 --> 00:10:12,880 Torej samo zrušijo ta regularni izraz tukaj 133 00:10:12,880 --> 00:10:21,770 h in potem \ w in potem sem tako \ w samo sprejema nobenih abecedni znak tam. 134 00:10:21,850 --> 00:10:26,820 Tako da tukaj iščemo za "h" in nato še črko 135 00:10:26,820 --> 00:10:30,060 in potem m, tako da tukaj, ki bi ustrezal šunko 136 00:10:30,060 --> 00:10:34,480 , «je Abraham Lincoln in šunka sendviči." 137 00:10:35,040 --> 00:10:37,150 To je posledica te skupine. 138 00:10:37,680 --> 00:10:43,130 Še ena stvar, ki jo lahko storimo, je uporaba naše pred nize besedila v Pythonu. 139 00:10:43,130 --> 00:10:46,220 Torej, mislim, da bo šel naprej in potegnite, da je tu gor. 140 00:10:46,220 --> 00:10:49,210 Python uvoz ponovno. 141 00:10:50,070 --> 00:10:54,000 In če bi bil jaz narediti isto stvar - recimo besedilo, 142 00:10:55,390 --> 00:11:00,800 »Abraham,« nam povečavo - tam gremo. 143 00:11:01,610 --> 00:11:06,430 Besedilo je: »Abraham poje šunko." 144 00:11:07,460 --> 00:11:15,260 Ok, in lahko privedlo = re.search. 145 00:11:16,260 --> 00:11:22,020 In potem lahko naš izraz je h, nato pa bom naredil piko m. 146 00:11:22,020 --> 00:11:26,280 Torej pika samo traja katerikoli znak, ki ni nova linija skupaj s številkami, 147 00:11:26,280 --> 00:11:28,650 odstotne znaki, kaj podobnega. 148 00:11:28,650 --> 00:11:38,030 In nato besedilo - bum - in potem result.group--ja. 149 00:11:38,030 --> 00:11:41,820 Tako da je samo, kako izvajati osnovne funkcije tukaj. 150 00:11:42,300 --> 00:11:55,110 Če bi imeli besedila prstan, da - to noro besedilo - Vključitev povedati veliko nazaj poševnico 151 00:11:55,110 --> 00:12:01,180 in godala v notranjosti in stvari, ki lahko izgledajo kot sekvenc za izhod v sili, 152 00:12:01,180 --> 00:12:08,480 potem bomo verjetno želeli uporabiti surovo pisanju se prepričajte, da je sprejet. 153 00:12:08,480 --> 00:12:14,120 In to samo izgleda tako. 154 00:12:14,120 --> 00:12:17,810 Torej, če smo iskali za vsako od njih pa ne smemo našli ničesar. 155 00:12:19,070 --> 00:12:21,680 Ampak to je, kako bi jo izvajala; tik pred niz 156 00:12:21,680 --> 00:12:24,990 regularni izraz daš črko R. 157 00:12:26,150 --> 00:12:30,260 >> Ok, tako da nam nadaljuj. 158 00:12:30,260 --> 00:12:33,730 Vse je v redu - tako si oglejmo nekaj ponavljajočih se vzorcev tukaj. 159 00:12:34,750 --> 00:12:39,150 Torej, ena stvar, ki jo želite storiti, je, ponavljam stvari 160 00:12:40,040 --> 00:12:42,480 kot ste iskanje po besedilu. 161 00:12:42,480 --> 00:12:48,300 Torej, da ne sledi poljubno število b - ti ab *. 162 00:12:48,630 --> 00:12:51,620 In potem so tu še vrsta drugih predpisov preveč. 163 00:12:51,620 --> 00:12:54,380 In si lahko ogledate vse te gor, bom teči skozi nekaj 164 00:12:54,380 --> 00:12:57,630 najpogosteje uporabljajo obstoječe. 165 00:12:57,630 --> 00:13:03,920 Torej ab + je sledila katerikoli N večji od 0 točke b. 166 00:13:04,510 --> 00:13:08,000 ab? je sledila 0 ali 1 v b. 167 00:13:09,190 --> 00:13:18,580 ab {N} je sledila N b, in tako naprej. 168 00:13:18,580 --> 00:13:22,820 Če imate 2 številke v zavitih oklepajih, ki ga določa vrsto 169 00:13:23,300 --> 00:13:25,440 da se lahko morda ujemajo. 170 00:13:26,390 --> 00:13:30,420 Tako da bomo videti bolj na nekaj ponavljajočih se vzorcev v minuto. 171 00:13:31,960 --> 00:13:42,300 Torej 2 stvari, da v mislih, ko uporabljate te ujemanje vzorcev orodja tukaj. 172 00:13:42,300 --> 00:13:52,120 Tako pravijo želimo pogledati na hm z "Abraham Lincoln naredi sendvičev s šunko." 173 00:13:52,120 --> 00:13:55,230 Zato sem spremenila ime Abraham Lincoln je Abrahamu. 174 00:13:55,230 --> 00:14:00,290 In zdaj iščemo, kaj se vrnila s to funkcijo iskanja, 175 00:14:00,290 --> 00:14:03,270 in se vrne ham le v tem primeru. 176 00:14:03,620 --> 00:14:08,080 In to, da je iskanje samo zato, ker seveda nima levi največ čakalne vrste. 177 00:14:08,080 --> 00:14:12,130 In vsi regularni izrazi, razen če ni drugače določeno, to. 178 00:14:12,830 --> 00:14:18,880 Če bi želeli, da bi našli vse, kar je funkcija za to - najti vse. 179 00:14:18,880 --> 00:14:35,100 Tako da lahko samo videti vse = re.findall ("h.m", besedilo) 180 00:14:35,100 --> 00:14:44,540 in nato all.group (). 181 00:14:44,540 --> 00:14:51,040 Vse izdeluje šunko in šunko, v tem primeru obeh nizov v Abrahama stegna. 182 00:14:51,610 --> 00:14:55,110 Tako, da je druga možnost. 183 00:14:56,250 --> 00:15:06,940 >> Čudovito. Druga stvar, da v mislih je, da regularni izrazi se največji intuitivno. 184 00:15:06,940 --> 00:15:09,520 Oglejmo si primer. 185 00:15:10,200 --> 00:15:16,070 Uspelo nam je, da je skrajni levi iskanje tukaj, potem pa sem poskušal večji iskanje 186 00:15:16,070 --> 00:15:18,800 z Kleene operaterja zvezdica. 187 00:15:18,800 --> 00:15:24,180 Torej za "Abraham Lincoln naredi sendvičev s šunko," in sem dobil nazaj le 188 00:15:24,180 --> 00:15:26,280 m kot rezultat. 189 00:15:26,280 --> 00:15:31,670 Vzrok za to napako je bila, da sem lahko sprejmejo poljubno število 190 00:15:31,670 --> 00:15:36,140 h, ker nisem navesti ničesar, da gredo med h in m. 191 00:15:36,140 --> 00:15:42,010 Edini primer je, da je imela m - edini primeri tam z vm v njem 192 00:15:42,010 --> 00:15:46,220 in poljubno število H je bilo le niz m. 193 00:15:46,490 --> 00:15:51,850 Potem sem poskusil še enkrat, sem rekel: "V redu, preidimo dejansko največjo skupino tu." 194 00:15:51,850 --> 00:15:59,670 In potem sem h. * M, tako da se samo vrne poljubno število znakov, med h in m. 195 00:16:00,280 --> 00:16:02,950 In če ste šele začeli in si mislil: "Oh, v redu, dobro bo to 196 00:16:02,950 --> 00:16:11,560 daj mi pršut, "je v resnici traja vse od hv Abrahama Lincolna 197 00:16:11,560 --> 00:16:13,690 vse tja do konca šunke. 198 00:16:14,040 --> 00:16:18,110 To je požrešen, ampak vidi h - vse to drugo besedilo - m, 199 00:16:18,110 --> 00:16:21,280 in to je tisto, kar je potrebno noter 200 00:16:22,060 --> 00:16:27,480 To je še posebej nezaslišane - to je značilnost smo lahko tudi 201 00:16:27,480 --> 00:16:30,670 navedite za to ne bodi pohlepen uporabo drugih funkcij. 202 00:16:31,480 --> 00:16:34,490 Ampak to je nekaj, kar moramo imeti v mislih predvsem 203 00:16:34,490 --> 00:16:38,720 ko gledaš HTML besedilu, ki je eden od razlogov, da 204 00:16:38,720 --> 00:16:41,500 regularne izraze je težko za HTML. 205 00:16:42,460 --> 00:16:46,310 Ker če imate HTML odprto oznako in nato še mnogo stvari v sredini 206 00:16:46,310 --> 00:16:49,820 in še nekaj drugih HTML zaprta oznako mnogo kasneje v programu, 207 00:16:49,820 --> 00:16:55,420 ste pravkar pojedli veliko kode HTML morda po pomoti. 208 00:16:56,200 --> 00:17:01,840 >> Vse pravice - tako bolj posebnih znakov, tako kot mnoge druge jezike, 209 00:17:01,840 --> 00:17:04,780 smo pobegnili z poševnice. 210 00:17:04,780 --> 00:17:10,329 Tako da bomo lahko uporabite piko določite katerikoli znak, razen za novo linijo. 211 00:17:10,329 --> 00:17:14,550 Mi lahko uporabite ubežni w določite vsako črko. 212 00:17:14,550 --> 00:17:20,329 In po analogiji pobega d za celo število - numerični znak. 213 00:17:20,630 --> 00:17:27,440 Mi lahko navedete - lahko uporabimo oklepaje določiti sorodne izraze. 214 00:17:27,440 --> 00:17:30,970 Tako da bi to sprejeli, b, ali c. 215 00:17:31,320 --> 00:17:37,000 In bomo lahko tudi določite, ali možnosti za bodisi A ali B. 216 00:17:37,000 --> 00:17:41,110 Na primer - če bomo iskali več možnosti 217 00:17:41,110 --> 00:17:44,940 v oklepaju, bi lahko uporabite ali subjekta, kot v - 218 00:17:44,940 --> 00:17:52,480 Tako vrnimo se k temu primeru tukaj. 219 00:17:53,000 --> 00:17:59,790 In zdaj nam bo - vrnimo se k temu primeru tukaj in nato 220 00:17:59,790 --> 00:18:12,290 sprejmejo AE - zato je treba to vrniti - Mislim, da je to še Abraham. 221 00:18:12,290 --> 00:18:17,410 Torej je to - če bomo vsi - super. 222 00:18:17,410 --> 00:18:22,700 Torej nam posodobiti besedilo tukaj. 223 00:18:22,700 --> 00:18:34,690 »Abraham poje šunko pa HEMMING svoje -. Medtem ko robljenje" Čudovito. 224 00:18:44,090 --> 00:18:47,330 Vse. Čudovito. Zdaj smo dobili pršut, šunka, in robom. 225 00:18:48,510 --> 00:18:59,370 Medtem ko robljenje - medtem pela z njim - pa brenčanje, da ga robu. Čudovito. 226 00:19:00,350 --> 00:19:03,250 Ista stvar. 227 00:19:03,820 --> 00:19:09,180 Zdaj vse vrne vedno samo pršut, šunka in rob brez pobral na hum ali zanj. 228 00:19:09,940 --> 00:19:22,600 Great - Pa kaj, če smo želeli pogledati niti tega, da - tako bi lahko tudi to 229 00:19:23,510 --> 00:19:33,810 on ali - se bomo vrnili k temu. 230 00:19:34,810 --> 00:19:45,760 Ok - tako - vse v redu - na položajih, ki jih lahko uporabite tudi strešica ali znak za dolar 231 00:19:45,760 --> 00:19:49,350 navesti, da iščete nekaj, kar na začetku ali na koncu niza. 232 00:19:50,260 --> 00:19:52,260 Ali začetek ali konec besedi. 233 00:19:52,400 --> 00:19:54,470 To je eden od načinov za uporabo tega. 234 00:19:55,630 --> 00:20:01,160 >> Ok - tako nam igral z nekoliko večji blok besedila. 235 00:20:03,950 --> 00:20:08,310 Recimo to vrstico tu - to izjavo tukaj. 236 00:20:08,310 --> 00:20:11,360 Moč regularnem izrazu, ki jih lahko podate vzorce 237 00:20:11,360 --> 00:20:13,390 ne samo določene znake. 238 00:20:14,900 --> 00:20:18,790 Dovolite nam, da - bodimo to imenujemo blok. 239 00:20:22,400 --> 00:20:27,110 Potem bomo prebrali vse to noter 240 00:20:28,890 --> 00:20:50,820 In potem - da nam bo vse =, kaj so nekatere stvari, ki jih lahko poiščete tukaj donosno? 241 00:20:50,820 --> 00:20:54,070 Lahko bi si za izražanje uho. 242 00:20:55,050 --> 00:21:01,520 Ni zelo zanimivo. Kaj pravite na to? Bomo videli, kaj se bo zgodilo. 243 00:21:03,710 --> 00:21:05,710 Sem dal to težavo. 244 00:21:06,380 --> 00:21:10,750 Torej, vse več stvari, preden ponovno in vse. 245 00:21:10,750 --> 00:21:15,630 Tako da bi se morali vrniti vse od začetka spremljanja vseh ponovni morda nekaj krat. 246 00:21:18,800 --> 00:21:21,970 In potem imamo tu moč regularnih izrazov je, da 247 00:21:21,970 --> 00:21:24,900 lahko določite vzorcev ne le znaki so tukaj. 248 00:21:24,900 --> 00:21:28,510 Torej, vse tja do končnega ponovno, se je začelo z levo večino in je bil pohlepen. 249 00:21:30,710 --> 00:21:32,710 Poglejmo - kaj še lahko iščemo. 250 00:21:32,710 --> 00:21:39,860 Mislim, da eno stvar, če ste bili zainteresirani pri iskanju zaimkom ona in on, 251 00:21:39,860 --> 00:21:44,600 bi lahko preveri s, enak 0 ali 1 252 00:21:44,600 --> 00:21:49,710 in izraz je, in da se verjetno ne bo vrnil - 253 00:21:49,710 --> 00:21:58,020 oh, mislim, da se vrne on, ker smo iskali na moči, da dan, tukaj so. 254 00:22:00,590 --> 00:22:06,270 Poskusimo z navedbo, da je to, da pridejo na začetku nečesa. 255 00:22:06,640 --> 00:22:09,530 Poglejmo, če pade. 256 00:22:09,530 --> 00:22:19,630 Tako da lahko naredimo maščobe, in tam ne bomo dobili ničesar, ker je bil 257 00:22:19,630 --> 00:22:22,870 ne pojavljajo v tem stavku. 258 00:22:24,960 --> 00:22:30,410 Čudovito. Ok - tako nazaj na mačko tukaj. 259 00:22:30,410 --> 00:22:35,720 Tako kompleksne vzorce je poškodoval možgane. 260 00:22:35,720 --> 00:22:40,500 Tako, da je razlog, zakaj jih uporabljamo regularne izraze, da bi se izognili teh vprašanj. 261 00:22:40,820 --> 00:22:43,520 >> Torej, tukaj so nekatere druge koristne načine lahko igrate z okoli. 262 00:22:43,520 --> 00:22:50,290 Ogledali smo si iskanjem danes, lahko pa uporabite tudi tekmo, Split, findall in skupin. 263 00:22:50,290 --> 00:22:53,970 Torej druge kul stvari lahko storite z regularnimi izrazi poleg pravkar 264 00:22:53,970 --> 00:22:58,870 iskanje vzorcev jemlje vzorec in ima vse tekme - 265 00:22:58,870 --> 00:23:02,530 njegove spremenljivke - in nato z uporabo tistih v kodi kasneje. 266 00:23:02,850 --> 00:23:05,980 To je lahko zelo koristna. Druge stvari, lahko računamo. 267 00:23:05,980 --> 00:23:11,720 Tako, da lahko računamo na število primerkov vzorec regularnega izraza, 268 00:23:11,720 --> 00:23:13,960 in to je tisto, kar smo lahko uporabite skupinami. 269 00:23:13,960 --> 00:23:17,550 In druge vrste pa so tudi možne. 270 00:23:18,040 --> 00:23:22,980 Torej, jaz samo želim, da govori malo več o drugih načinih, ki jih lahko uporabite regularne izraze. 271 00:23:22,980 --> 00:23:29,100 >> Torej, še ena napredna uporaba je v mehke ujemanje. 272 00:23:29,100 --> 00:23:33,450 Torej, če iščete besedilo za izražanje, Julius Caesar, 273 00:23:33,450 --> 00:23:37,740 in boste videli bodisi Gaj Julij Cezar ali ime Julij Cezar v drugih jezikih, 274 00:23:37,740 --> 00:23:44,400 potem boste morda želeli, da dodelijo določeno težo te vrednote. 275 00:23:44,400 --> 00:23:48,930 In če je dovolj blizu - če prečka določen prag - potem hočeš 276 00:23:48,930 --> 00:23:50,860 biti sposoben sprejeti Julija Cezarja. 277 00:23:50,860 --> 00:24:00,580 Torej, obstaja nekaj različnih izvedb za to je v nekaj drugih jezikih, kot dobro. 278 00:24:02,580 --> 00:24:08,420 Tukaj je nekaj drugih orodij, Regex Pal - priročen mali app na spletu, da 279 00:24:08,420 --> 00:24:12,190 preverite, ali so vaši regularni izrazi pravilno sestavljena. 280 00:24:12,190 --> 00:24:18,500 Obstajajo tudi samostojni orodja, ki lahko delujejo na namizju 281 00:24:18,500 --> 00:24:22,100 kot Ultra Pico, in pa tudi samo kuharske knjige. 282 00:24:22,100 --> 00:24:25,410 Torej, če delaš projekt, ki vključuje tone regularnih izrazov 283 00:24:25,410 --> 00:24:29,810 to je verjetno kraj za iti zunaj obsega danes. 284 00:24:31,520 --> 00:24:35,770 In potem samo, da vam občutek, kako pogosti, da je 285 00:24:35,770 --> 00:24:44,090 je grep v Unix, Perl ima vgrajeno in C je PCRE za C. 286 00:24:44,090 --> 00:24:48,890 In potem vsi ti jeziki imajo tudi regularni izraz pakete 287 00:24:48,890 --> 00:24:52,020 ki delujejo s bistvu isto sintakso smo dobili okus danes. 288 00:24:52,020 --> 00:24:54,790 PHP, Java, Ruby, in tako naprej. 289 00:24:56,080 --> 00:24:58,980 >> Google Code Search je dejansko vredno omeniti, da je eden od 290 00:24:58,980 --> 00:25:05,720 sorazmerno malo vlog tam, ki omogoča javnosti dostop 291 00:25:05,720 --> 00:25:07,800 njegova baza uporabo regularnih izrazov. 292 00:25:07,800 --> 00:25:12,920 Torej, če pogledaš na Google Code Search lahko najdete kodo 293 00:25:12,920 --> 00:25:16,880 Če iščete na primer o tem, kako bi lahko bila uporabljena funkcija, 294 00:25:16,880 --> 00:25:21,610 lahko uporabite regularni izraz, da bi našli, ki se uporabljajo v vse vrste različnih primerov to funkcijo. 295 00:25:21,610 --> 00:25:28,000 Lahko bi si za fwrite, nato pa bi morali iskati zastavo pisati ali brati 296 00:25:28,000 --> 00:25:32,000 če bi želel primer fwrite se uporablja v tem primeru. 297 00:25:33,530 --> 00:25:37,010 Torej isto stvar tam in tukaj je nekaj referenc. 298 00:25:37,010 --> 00:25:40,990 Ta bo na voljo tudi na spletu, tako da gredo naprej, če 299 00:25:40,990 --> 00:25:45,560 želite pogledati Python, grep, Perl - si samo želim, da bi dobili nekaj navdiha 300 00:25:45,560 --> 00:25:50,650 ali če želite videti več na teoriji tukaj je nekaj dobro skakali mestih. 301 00:25:50,650 --> 00:25:53,870 Najlepša hvala. 302 00:25:58,470 --> 00:25:59,910 [CS50.TV]