1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Seminaar: patroon wat ooreenstem met Gereelde Expressions] 2 00:00:02,000 --> 00:00:04,000 [John Mussmann-Harvard Universiteit] 3 00:00:04,000 --> 00:00:07,220 [Hierdie is CS50.-CS50.TV] 4 00:00:07,780 --> 00:00:11,610 Okay. Wel, welkom almal. Dit is CS50 2012. 5 00:00:11,780 --> 00:00:16,610 My naam is John, en ek sal praat vandag oor die gereelde uitdrukkings. 6 00:00:16,610 --> 00:00:22,530 Gereelde uitdrukkings is hoofsaaklik 'n instrument nie, maar ook soms gebruik 7 00:00:22,530 --> 00:00:28,650 in die kode aktief in wese ooreenstem met patrone en snare. 8 00:00:28,650 --> 00:00:33,800 So hier is 'n web comic van Kletskerk. 9 00:00:34,440 --> 00:00:42,370 In hierdie strokiesprent is daar 'n moord raaisel waar die moordenaar het 10 00:00:42,370 --> 00:00:47,860 gevolg iemand op vakansie, en die spelers het om te 11 00:00:47,860 --> 00:00:52,500 soek deur 200 MB e-pos op soek na 'n adres. 12 00:00:52,500 --> 00:00:56,090 En hulle is oor om op te gee wanneer iemand wat gereelde uitdrukkings weet - 13 00:00:56,090 --> 00:01:00,550 vermoedelik 'n superheld - swiep neer en skryf 'n paar kode 14 00:01:00,550 --> 00:01:02,970 en los die moord raaisel. 15 00:01:02,970 --> 00:01:07,370 So vermoedelik wat iets wat jy sal bemagtig word om te doen 16 00:01:07,370 --> 00:01:09,370 na hierdie seminaar. 17 00:01:09,370 --> 00:01:12,250 Ons gaan net 'n kort inleiding te gee aan die taal 18 00:01:12,250 --> 00:01:16,770 en gee jou genoeg middele om te gaan na meer hulpbronne op jou eie. 19 00:01:17,680 --> 00:01:21,700 >> So gereelde uitdrukkings lyk basies soos hierdie. 20 00:01:22,930 --> 00:01:25,550 Dit is 'n gewone uitdrukking in Ruby. 21 00:01:25,550 --> 00:01:29,280 Dit is nie vreeslik anders oor tale. 22 00:01:29,690 --> 00:01:37,630 Ons het net op die houe te begin, en merk die gewone uitdrukking in Ruby. 23 00:01:37,630 --> 00:01:42,880 En dit is 'n gewone uitdrukking om te kyk in e-pos adres patroon. 24 00:01:42,880 --> 00:01:49,160 So sien ons by die eerste bietjie kyk vir enige alfanumeriese karakter. 25 00:01:50,500 --> 00:01:54,880 Dit is omdat e-pos adresse het dikwels te begin met 'n alfabetiese karakter. 26 00:01:55,460 --> 00:01:59,330 En dan 'n spesiale karakter gevolg deur die @-simbool. 27 00:01:59,330 --> 00:02:03,260 En dan is dieselfde ding vir die domein naam. 28 00:02:03,260 --> 00:02:10,030 En dan tussen 2 en 4 karakters te kyk vir die. Com, net,. En so aan. 29 00:02:10,850 --> 00:02:13,200 So dit is nog 'n voorbeeld van 'n gereelde uitdrukking. 30 00:02:13,200 --> 00:02:17,270 So gereelde uitdrukkings protokolle vir die vind van editors in die teks. 31 00:02:17,270 --> 00:02:21,130 Hulle doen vergelykings, keuses, en vervanging. 32 00:02:21,690 --> 00:02:27,970 So 'n derde voorbeeld is die vind van al die telefoonnommers wat eindig in 54 in 'n gids. 33 00:02:27,970 --> 00:02:34,360 So voor Dawid vreet die CS50 Gids ons kon soek 34 00:02:34,360 --> 00:02:40,450 'n patroon waar ons hakies dan 3 nommers dan eindig hakies, 35 00:02:40,450 --> 00:02:44,070 3 meer getalle, 'n bietjie, 2 nommers, en dan 54. 36 00:02:44,070 --> 00:02:48,310 En dit sou in wese is hoe ons kom met 'n gewone uitdrukking om te soek na dit. 37 00:02:49,150 --> 00:02:52,960 >> So is daar - ons gedoen het 'n paar dinge in CS50 wat 'n bietjie soos 38 00:02:52,960 --> 00:02:59,740 gereelde uitdrukkings, so - byvoorbeeld - in die dictionary.C lêer 39 00:02:59,740 --> 00:03:04,720 vir die spel check probleem stel jy mag gebruik het fscanf 40 00:03:04,720 --> 00:03:07,930 om te lees in 'n woord uit die woordeboek. 41 00:03:07,930 --> 00:03:16,240 En jy kan sien die persentasie 45s is op soek na 'n string van 45 karakters. 42 00:03:16,240 --> 00:03:20,020 So dit is 'n bietjie soos 'n basiese gewone uitdrukking. 43 00:03:21,150 --> 00:03:26,060 En jy kan enige 45 karakters wat pas by die wetsontwerp in daar 44 00:03:26,060 --> 00:03:28,080 en kies diegene up. 45 00:03:28,080 --> 00:03:33,480 En dan is die tweede voorbeeld in die mees onlangse web probleem op te los 46 00:03:33,480 --> 00:03:40,760 stel in die distro-kode vir PHP Ons doen werklik 'n eenvoudige gewone uitdrukking. 47 00:03:40,760 --> 00:03:46,790 En hierdie een is eenvoudig net te kyk om te kyk of die webblad wat geslaag het in 48 00:03:46,790 --> 00:03:51,940 ooreenstem met óf login of meld registreer. PHP. 49 00:03:52,220 --> 00:03:57,910 En dan weer terug waar of onwaar is gebaseer op die gewone uitdrukking wat ooreenstem. 50 00:03:59,400 --> 00:04:01,740 >> So wanneer jy gebruik gewone uitdrukking? 51 00:04:01,740 --> 00:04:04,820 Hoekom is jy hier vandag? 52 00:04:05,330 --> 00:04:08,480 So jy wil nie gereelde uitdrukking te gebruik wanneer daar is iets wat 53 00:04:08,480 --> 00:04:11,640 doen die werk vir jou nog makliker. 54 00:04:11,640 --> 00:04:15,510 So XML en HTML is eintlik redelik moeilike 55 00:04:15,510 --> 00:04:18,480 gereelde uitdrukkings te skryf soos ons sal sien in 'n bietjie. 56 00:04:19,110 --> 00:04:23,280 So is daar toegewyde ontleders vir hierdie tale. 57 00:04:24,170 --> 00:04:30,060 Jy moet ook goed wees met die handel offs en akkuraatheid gereeld. 58 00:04:30,060 --> 00:04:36,220 As jy probeer - so ons het 'n gereelde uitdrukking vir 'n e-pos adres, 59 00:04:37,370 --> 00:04:42,590 maar sê jy wou 'n spesifieke e-pos adres en geleidelik die 60 00:04:42,590 --> 00:04:48,570 gereelde uitdrukking dalk meer kompleks as dit is meer akkuraat. 61 00:04:49,580 --> 00:04:52,260 So wat sou een handel af wees. 62 00:04:52,260 --> 00:04:55,330 Jy het om seker te wees dat jy okay is om met die gewone uitdrukking. 63 00:04:55,330 --> 00:04:57,920 As jy weet presies wat jy is op soek na dit dalk meer sin maak 64 00:04:57,920 --> 00:05:02,070 te sit in die tyd en skryf vir 'n meer doeltreffende ontleder. 65 00:05:02,070 --> 00:05:06,980 En uiteindelik is daar 'n historiese probleem met die gereeldheid 66 00:05:06,980 --> 00:05:08,940 van uitdrukking en tale. 67 00:05:08,940 --> 00:05:12,960 Gereelde uitdrukkings is eintlik baie meer kragtig as 68 00:05:12,960 --> 00:05:16,450 gereelde uitdrukkings per sê in 'n formele sin. 69 00:05:17,130 --> 00:05:20,150 >> So ek wil nie te ver gaan in die formele teorie, 70 00:05:20,150 --> 00:05:24,000 maar die meeste tale wat ons kode in werklikheid is nie gereeld. 71 00:05:24,000 --> 00:05:29,110 En dit is die rede waarom gereelde uitdrukkings soms nie in ag geneem almal wat veilig is. 72 00:05:29,670 --> 00:05:33,150 So basies is daar 'n Chomsky-hiërargie vir tale, 73 00:05:33,150 --> 00:05:38,400 en gereelde uitdrukkings te bou met behulp van Unie, aaneenskakellling, 74 00:05:38,400 --> 00:05:41,810 en die Kleene ster operasie wat ons sal sien in 'n paar minute. 75 00:05:43,130 --> 00:05:48,860 As jy belangstel in teorie daar is nogal 'n baie gaan op daar onder die kap. 76 00:05:50,360 --> 00:05:55,880 >> So 'n kort geskiedenis - net vir die konteks hier - gereelde stelle vorendag gekom 77 00:05:55,880 --> 00:05:59,580 in die 1950's, en dan het ons 'n eenvoudige redakteurs wat 78 00:05:59,580 --> 00:06:03,300 opgeneem gereelde uitdrukkings - net soek vir strykers. 79 00:06:03,570 --> 00:06:09,110 Grep - wat is 'n command line instrument - was een van die eerste 80 00:06:09,110 --> 00:06:14,160 baie gewild gereedskap wat opgeneem gereelde uitdrukkings in die 1960's. 81 00:06:14,160 --> 00:06:20,560 In die 80's, was Perl gebou - is 'n programmeertaal wat 82 00:06:20,560 --> 00:06:24,110 sluit gereelde uitdrukkings baie prominent. 83 00:06:24,550 --> 00:06:30,130 En meer onlangs het ons Perl versoenbaar gewone uitdrukking 84 00:06:30,130 --> 00:06:35,870 protokolle basies in ander tale wat gebruik maak van baie van dieselfde sintaks. 85 00:06:36,630 --> 00:06:39,840 Natuurlik die belangrikste gebeurtenis was in 2008 86 00:06:39,840 --> 00:06:43,040 waar daar was die eerste Nasionale Gereelde Expressions Day, 87 00:06:43,040 --> 00:06:47,350 wat ek glo is 1 Junie as jy wil dit te vier. 88 00:06:48,430 --> 00:06:50,840 >> Weereens, net 'n bietjie meer teorie hier. 89 00:06:52,180 --> 00:06:55,320 So is daar 'n paar verskillende maniere van die bou van gereelde uitdrukkings. 90 00:06:55,950 --> 00:07:02,050 'N eenvoudige manier is om die uitdrukking te bou wat jy gaan 91 00:07:02,050 --> 00:07:07,500 loop op die tou te interpreteer - basies bou van 'n klein mini-program wat 92 00:07:07,500 --> 00:07:11,870 analiseer stukke van 'n string en sien, "O, pas dit die gewone uitdrukking of nie?" 93 00:07:12,250 --> 00:07:14,250 En dan loop nie. 94 00:07:14,250 --> 00:07:17,300 So as jy 'n baie klein gereelde uitdrukking, is dit waarskynlik 95 00:07:17,300 --> 00:07:19,380 die mees doeltreffende manier om dit te doen. 96 00:07:20,090 --> 00:07:25,420 En dan as jy - 'n ander opsie is om te hou rekonstruksie van die 97 00:07:25,420 --> 00:07:30,260 uitdrukking as jy gaan, en wat is die moontlikheid simuleer. 98 00:07:30,440 --> 00:07:37,690 En hierdie vroeë pogings om op 'n gereelde uitdrukking algoritmes was 99 00:07:37,690 --> 00:07:44,330 relatief eenvoudige en relatief vinnig, maar het nie 'n baie buigsaamheid. 100 00:07:44,330 --> 00:07:47,500 So om selfs 'n paar van die dinge wat ons gaan om te kyk na 101 00:07:47,500 --> 00:07:52,860 Vandag het ons meer komplekse gereelde uitdrukking te doen 102 00:07:52,860 --> 00:07:56,650 implementering wat potensieel veel stadiger, so dit is iets om in gedagte te 103 00:07:57,510 --> 00:08:02,920 Daar is ook 'n gereelde uitdrukkings ontkenning van die aanval verskeidenheid 104 00:08:02,920 --> 00:08:08,330 wat gebruik maak van die potensiaal vir hierdie nuwe implementering van 105 00:08:08,330 --> 00:08:10,930 gereelde uitdrukkings om 'n baie kompleks. 106 00:08:11,570 --> 00:08:15,650 En in baie dieselfde sin dat ons gesien het in buffer oorloop aanvalle, 107 00:08:15,650 --> 00:08:21,610 jy het aanvalle wat werk deur die maak van rekursiewe sirkelroetes 108 00:08:21,610 --> 00:08:24,400 oorrompel die kapasiteit van die geheue. 109 00:08:24,780 --> 00:08:29,540 En op die pad Regexen is een van die amptelike meervoude van gewone uitdrukking 110 00:08:29,540 --> 00:08:32,890 deur analogie beeste in die Anglo-Saksiese. 111 00:08:33,500 --> 00:08:40,169 >> Goed, so die Python biblioteek baie van julle hier in persoon Macs, 112 00:08:40,169 --> 00:08:43,860 sodat jy kan eintlik trek dit op jou skerm. 113 00:08:43,860 --> 00:08:47,480 Gereelde uitdrukkings is gebou in Python. 114 00:08:48,070 --> 00:08:53,020 En so Python is preloaded op Mac en ook aanlyn beskikbaar by hierdie skakel. 115 00:08:53,770 --> 00:08:57,350 So as jy kyk wat jy kan breek en maak seker jy het Python 116 00:08:58,080 --> 00:09:00,170 as ons speel hier rond. 117 00:09:00,780 --> 00:09:06,420 Daar is 'n handleiding online, so as jy net Python tik in jou rekenaar 118 00:09:06,420 --> 00:09:10,500 sal jy sien dat die weergawe kom in die terminale. 119 00:09:11,070 --> 00:09:17,720 So ek het 'n skakel na die handleiding vir weergawe 2 van Python sowel as 'n oneerlik vel. 120 00:09:17,720 --> 00:09:23,100 Daar is 'n weergawe 3 van Python, maar jou Mac nie noodwendig 121 00:09:23,100 --> 00:09:25,130 kom met wat preloaded. 122 00:09:25,130 --> 00:09:27,360 So nie vreeslik anders. 123 00:09:27,360 --> 00:09:33,270 Goed, so 'n paar basiese beginsels van die gebruik van gereelde uitdrukkings in Python. 124 00:09:34,080 --> 00:09:42,650 >> So hier is wat ek gebruik 'n baie eenvoudige uitdrukking, so ek het Python invoer re 125 00:09:43,750 --> 00:09:47,070 en dan het die gevolg van re.search. 126 00:09:47,070 --> 00:09:49,910 En die soektog neem 2 argumente. 127 00:09:49,910 --> 00:09:56,040 Die eerste is die gewone uitdrukking, en die tweede is die teks 128 00:09:56,040 --> 00:09:58,290 of string wat jy wil om te ontleed. 129 00:09:58,290 --> 00:10:01,210 En dan het ek gedruk uit die result.group. 130 00:10:01,580 --> 00:10:05,860 So dit is die 2 basiese funksies wat ons gaan om te sien vandag 131 00:10:06,790 --> 00:10:10,170 in die leer oor gereelde uitdrukkings. 132 00:10:10,170 --> 00:10:12,880 So net die afbreek van die gewone uitdrukking hier 133 00:10:12,880 --> 00:10:21,770 h en dan \ w en dan m so \ w aanvaar sommer enige alfabetiese karakter in daar. 134 00:10:21,850 --> 00:10:26,820 So hier is ons op soek is na 'n "h" en dan nog 'n letter van die alfabet 135 00:10:26,820 --> 00:10:30,060 en dan m, so hier is wat sal ooreenstem ham 136 00:10:30,060 --> 00:10:34,480 in, "Abraham Lincoln en ham toebroodjies." 137 00:10:35,040 --> 00:10:37,150 Dit is die resultaat van die groep. 138 00:10:37,680 --> 00:10:43,130 Nog 'n ding wat ons kan doen is om ons voor die snare van die teks in Python. 139 00:10:43,130 --> 00:10:46,220 So ek dink ek gaan voort en trek dat tot hier. 140 00:10:46,220 --> 00:10:49,210 Python invoer re. 141 00:10:50,070 --> 00:10:54,000 En as ek dieselfde ding te doen - laat ons sê teks is, 142 00:10:55,390 --> 00:11:00,800 "Abraham," laat ons zoom in - daar gaan ons. 143 00:11:01,610 --> 00:11:06,430 Die teks is, "Abraham eet ham." 144 00:11:07,460 --> 00:11:15,260 Goed, en dan lei = re.search. 145 00:11:16,260 --> 00:11:22,020 En dan is ons uitdrukking kan h, en dan sal ek dit doen dot m. 146 00:11:22,020 --> 00:11:26,280 So dot neem net 'n karakter wat nie 'n nuwe lyn insluitend nommers, 147 00:11:26,280 --> 00:11:28,650 persentasie tekens, iets soos dit. 148 00:11:28,650 --> 00:11:38,030 En dan teks - boom - en dan result.group--ja. 149 00:11:38,030 --> 00:11:41,820 So dit is net hoe basiese funksies om hier te implementeer. 150 00:11:42,300 --> 00:11:55,110 As ons 'n teks ring wat - wat mal teks - ingesluit sê baie van die terug houe 151 00:11:55,110 --> 00:12:01,180 en snare binne en dinge wat lyk soos 'escape sequences, 152 00:12:01,180 --> 00:12:08,480 dan sal ons waarskynlik wil die rou teks invoer te gebruik om seker te maak dat aanvaar word. 153 00:12:08,480 --> 00:12:14,120 En dit lyk net soos dit. 154 00:12:14,120 --> 00:12:17,810 So as ons is op soek na elkeen van hulle in daar moet ons dit nie vind nie. 155 00:12:19,070 --> 00:12:21,680 Maar dit is hoe jy dit sou implementeer; net voor die string 156 00:12:21,680 --> 00:12:24,990 die gewone uitdrukking jy het die brief r. 157 00:12:26,150 --> 00:12:30,260 >> Goed, so laat ons gaan. 158 00:12:30,260 --> 00:12:33,730 Alle reg - so kom ons kyk na 'n paar herhalende patrone hier. 159 00:12:34,750 --> 00:12:39,150 So een ding wat jy wil doen, is herhaal dinge 160 00:12:40,040 --> 00:12:42,480 as jy op soek is deur teks. 161 00:12:42,480 --> 00:12:48,300 Om dit te doen 'n gevolg deur 'n aantal van b - jy doen AB *. 162 00:12:48,630 --> 00:12:51,620 En dan is daar 'n reeks van ander reëls ook. 163 00:12:51,620 --> 00:12:54,380 En jy kan sien al hierdie up, ek sal net loop deur 'n paar van die 164 00:12:54,380 --> 00:12:57,630 mees algemeen gebruik word kinders. 165 00:12:57,630 --> 00:13:03,920 So AB + is 'n gevolg deur 'n N groter as 0 of b. 166 00:13:04,510 --> 00:13:08,000 AB? is 'n gevolg deur 0 of 1 van b. 167 00:13:09,190 --> 00:13:18,580 AB {N} is 'n gevolg deur N van b, en dan so aan. 168 00:13:18,580 --> 00:13:22,820 As jy 2 nommers in die krulhakies jy spesifiseer van 'n reeks 169 00:13:23,300 --> 00:13:25,440 wat kan moontlik ooreenstem. 170 00:13:26,390 --> 00:13:30,420 So sal ons kyk meer na 'n paar herhalende patrone in 'n minuut. 171 00:13:31,960 --> 00:13:42,300 So 2 dinge in gedagte te hou wanneer die gebruik van hierdie patroon wat ooreenstem met gereedskap hier. 172 00:13:42,300 --> 00:13:52,120 So sê ons wil om te kyk na die hm van, "Abraham Lincoln maak ham toebroodjies." 173 00:13:52,120 --> 00:13:55,230 So ek verander Abraham Lincoln se naam na Abraham. 174 00:13:55,230 --> 00:14:00,290 En nou is ons op soek na wat is teruggestuur deur hierdie soektog funksie, 175 00:14:00,290 --> 00:14:03,270 en dit gee net ham in hierdie geval. 176 00:14:03,620 --> 00:14:08,080 En is dit nie dat, omdat soek natuurlik net neem die linker mees tou. 177 00:14:08,080 --> 00:14:12,130 En al die gereelde uitdrukkings, tensy jy anders spesifiseer, sal dit doen. 178 00:14:12,830 --> 00:14:18,880 As ons wou almal om te vind daar is 'n funksie vir daardie - vind nie. 179 00:14:18,880 --> 00:14:35,100 So wat net lyk soos almal = re.findall ('h.m', text) 180 00:14:35,100 --> 00:14:44,540 en dan all.group (). 181 00:14:44,540 --> 00:14:51,040 Alle produseer beide Gam en ham, in hierdie geval beide van die snare in Abraham elke ham. 182 00:14:51,610 --> 00:14:55,110 So dit is 'n ander opsie. 183 00:14:56,250 --> 00:15:06,940 >> Groot. Die ander ding wat in gedagte moet hou, is dat gereelde uitdrukkings Neem die grootste intuïtief. 184 00:15:06,940 --> 00:15:09,520 Kom ons kyk na hierdie voorbeeld. 185 00:15:10,200 --> 00:15:16,070 Ons het dit het die meeste search hier, en dan het ek probeer om 'n groter soek 186 00:15:16,070 --> 00:15:18,800 gebruik van die Kleene ster operateur. 187 00:15:18,800 --> 00:15:24,180 So nie, "Abraham Lincoln maak hamtoebroodjies," en ek het net terug 188 00:15:24,180 --> 00:15:26,280 m as 'n resultaat. 189 00:15:26,280 --> 00:15:31,670 Die rede vir die fout was dat ek kon geneem het 'n aantal 190 00:15:31,670 --> 00:15:36,140 h is, want ek het nie iets om te gaan in tussen h en m spesifiseer. 191 00:15:36,140 --> 00:15:42,010 Die enigste voorbeeld is daar wat 'm - die enigste voorbeelde is daar met m in dit 192 00:15:42,010 --> 00:15:46,220 en 'n aantal van h se was net die string m. 193 00:15:46,490 --> 00:15:51,850 Toe het ek probeer om dit weer, ek het gesê: "Goed, laat ons die werklike grootste groep hier." 194 00:15:51,850 --> 00:15:59,670 En dan het ek gedoen h. * M, sodat net terugkeer enige aantal karakters tussen h en m. 195 00:16:00,280 --> 00:16:02,950 En as jy net begin en dink, "O, okay, goed dit sal 196 00:16:02,950 --> 00:16:11,560 kry my ham, "Dit neem eintlik alles van die h in Abraham Lincoln 197 00:16:11,560 --> 00:16:13,690 al die pad tot aan die einde van Gam. 198 00:16:14,040 --> 00:16:18,110 Dit is gulsig, dit sien h - al hierdie ander teks - m, 199 00:16:18,110 --> 00:16:21,280 en dit is wat dit neem om in 200 00:16:22,060 --> 00:16:27,480 Dit is 'n besonder uitmuntend - dit is 'n funksie kan ons ook 201 00:16:27,480 --> 00:16:30,670 spesifiseer vir dit nie gulsig wees met behulp van ander funksies. 202 00:16:31,480 --> 00:16:34,490 Maar dit is iets wat ons moet in gedagte hou veral 203 00:16:34,490 --> 00:16:38,720 wanneer jy kyk na HTML teks, wat is een van die redes wat 204 00:16:38,720 --> 00:16:41,500 gereelde uitdrukkings is moeilik vir HTML. 205 00:16:42,460 --> 00:16:46,310 Want as jy 'n HTML tag oop en dan baie van die dinge wat in die middel 206 00:16:46,310 --> 00:16:49,820 en dan 'n paar ander HTML gesluit tag veel later in die program, 207 00:16:49,820 --> 00:16:55,420 jy het nou net geëet 'n baie van jou HTML-kode dalk per ongeluk. 208 00:16:56,200 --> 00:17:01,840 >> Alle reg - so meer spesiale karakters, soos baie ander tale, 209 00:17:01,840 --> 00:17:04,780 ons ontsnap die gebruik van die streep. 210 00:17:04,780 --> 00:17:10,329 So kan ons die dot die gebruik van enige karakter te gee nie, behalwe vir 'n nuwe lyn. 211 00:17:10,329 --> 00:17:14,550 Ons kan gebruik om die ontsnapping w enige alfabetiese karakter te gee. 212 00:17:14,550 --> 00:17:20,329 En deur analogie ontsnap d vir enige heelgetal - numeriese karakter. 213 00:17:20,630 --> 00:17:27,440 Ons kan spesifiseer - ons kan gebruik tussen hakies verwante uitdrukkings te spesifiseer. 214 00:17:27,440 --> 00:17:30,970 So dit sou aanvaar, b of c. 215 00:17:31,320 --> 00:17:37,000 En ons kan ook spesifiseer of opsies vir óf 'n of b. 216 00:17:37,000 --> 00:17:41,110 Byvoorbeeld - as ons is op soek na verskeie moontlikhede 217 00:17:41,110 --> 00:17:44,940 in hakies kon ons die of operateur gebruik as in - 218 00:17:44,940 --> 00:17:52,480 so laat ons gaan terug na die voorbeeld hier. 219 00:17:53,000 --> 00:17:59,790 En nou, laat ons neem - laat ons gaan terug na die voorbeeld hier, en dan 220 00:17:59,790 --> 00:18:12,290 neem ae - so dit moet terug - ek dink dit nog steeds is Abraham. 221 00:18:12,290 --> 00:18:17,410 So hierdie - as ons almal - groot. 222 00:18:17,410 --> 00:18:22,700 So laat ons werk om die teks hier. 223 00:18:22,700 --> 00:18:34,690 "Abraham eet ham, terwyl omsluit sy -. Terwyl Hemming" Groot. 224 00:18:44,090 --> 00:18:47,330 Almal. Groot. Nou kry ons Gam, Gam en Hom. 225 00:18:48,510 --> 00:18:59,370 Terwyl Hemming - terwyl neurie aan hom - terwyl neurie te soom hom. Groot. 226 00:19:00,350 --> 00:19:03,250 Dieselfde ding. 227 00:19:03,820 --> 00:19:09,180 Nou het al terug nog net Gam, Gam en hom sonder optel op die neurie of die hom. 228 00:19:09,940 --> 00:19:22,600 Groot - so what as ons wou om te kyk na óf dat - so kan ons ook doen 229 00:19:23,510 --> 00:19:33,810 hom of nie - ons sal terug te kom na daardie. 230 00:19:34,810 --> 00:19:45,760 Goed - so - al reg - in posisies wat jy kan ook gebruik om die kappie of die dollar-teken 231 00:19:45,760 --> 00:19:49,350 om te bepaal wat jy soek vir iets aan die begin of die einde van 'n string. 232 00:19:50,260 --> 00:19:52,260 Of die begin of die einde van 'n woord. 233 00:19:52,400 --> 00:19:54,470 Dit is een manier om dit te gebruik. 234 00:19:55,630 --> 00:20:01,160 >> Goed - so laat ons speel rond met 'n effens groter blok van teks. 235 00:20:03,950 --> 00:20:08,310 Kom ons sê dit ry hier - hierdie stelling hier. 236 00:20:08,310 --> 00:20:11,360 Die krag van 'n gereelde uitdrukking is dat hulle patrone kan spesifiseer 237 00:20:11,360 --> 00:20:13,390 nie net vas karakters. 238 00:20:14,900 --> 00:20:18,790 Kom ons maak - kom ons noem hierdie blok. 239 00:20:22,400 --> 00:20:27,110 Dan sal ons lees al wat in 240 00:20:28,890 --> 00:20:50,820 En dan het 'n - laat ons almal =, so wat is 'n paar dinge wat ons kan soek in hier winsgewend? 241 00:20:50,820 --> 00:20:54,070 Ons kan kyk vir die uitdrukking gehoor. 242 00:20:55,050 --> 00:21:01,520 Nie baie interessant. Hoe gaan dit? Ons sal sien wat gebeur. 243 00:21:03,710 --> 00:21:05,710 Ek het dit 'n probleem. 244 00:21:06,380 --> 00:21:10,750 So 'n aantal van die dinge voordat dit weer en almal. 245 00:21:10,750 --> 00:21:15,630 Sodat moet terugkeer alles van die begin tot al weer miskien 'n paar keer. 246 00:21:18,800 --> 00:21:21,970 En dan is hier ons het die krag van die gereelde uitdrukkings is dat hulle 247 00:21:21,970 --> 00:21:24,900 kan spesifiseer patrone nie net karakters hier is. 248 00:21:24,900 --> 00:21:28,510 So al die pad tot by die finale re, dit begin met die linker en die meeste was gulsig. 249 00:21:30,710 --> 00:21:32,710 Kom ons kyk - wat anders kan ons kyk vir. 250 00:21:32,710 --> 00:21:39,860 Ek dink een ding as jy belangstel in op soek na die voornaamwoorde sy en hy 251 00:21:39,860 --> 00:21:44,600 jy kan kyk vir s gelyk aan 0 of 1 252 00:21:44,600 --> 00:21:49,710 en die uitdrukking hy, en dit is waarskynlik nie van plan om terug te keer - 253 00:21:49,710 --> 00:21:58,020 O ja, ek dink dit teruggekeer het, want daar is ons op soek na die krag, daardie dag, hier is. 254 00:22:00,590 --> 00:22:06,270 Kom ons probeer verduidelik dat dit het om te kom aan die begin van iets. 255 00:22:06,640 --> 00:22:09,530 Kom ons kyk of dit val af. 256 00:22:09,530 --> 00:22:19,630 So ons kan doen om vet, en daar kry ons niks doen nie, want sy en hy 257 00:22:19,630 --> 00:22:22,870 kom nie in hierdie frase. 258 00:22:24,960 --> 00:22:30,410 Groot. Goed - so terug na die kat hier. 259 00:22:30,410 --> 00:22:35,720 So komplekse patrone is seer van die brein. 260 00:22:35,720 --> 00:22:40,500 So dit is hoekom ons gebruik reëlmatige uitdrukkings hierdie kwessies te vermy. 261 00:22:40,820 --> 00:22:43,520 >> So hier is 'n paar ander nuttige maniere wat jy kan speel rond met. 262 00:22:43,520 --> 00:22:50,290 Ons kyk na soek vandag, maar jy kan ook gebruik match, verdeel, findall, en groepe. 263 00:22:50,290 --> 00:22:53,970 So ander cool dinge wat jy kan doen met gereelde uitdrukkings behalwe net 264 00:22:53,970 --> 00:22:58,870 soek vir patrone is die neem van 'n patroon en hou al die wedstryde - 265 00:22:58,870 --> 00:23:02,530 die veranderlikes - en dan met behulp van die mense in jou kode later op. 266 00:23:02,850 --> 00:23:05,980 Dit kan baie nuttig. Ander dinge kan tel nie. 267 00:23:05,980 --> 00:23:11,720 So kan ons die telling van die aantal gevalle van 'n gewone uitdrukking patroon, 268 00:23:11,720 --> 00:23:13,960 en dit is wat groepe wat ons kan gebruik vir. 269 00:23:13,960 --> 00:23:17,550 En ander maniere as goed is ook moontlik. 270 00:23:18,040 --> 00:23:22,980 So ek wil net 'n bietjie meer praat oor die ander maniere wat jy kan gebruik om gereelde uitdrukkings. 271 00:23:22,980 --> 00:23:29,100 >> So 'n meer gevorderde toepassing is in matches. 272 00:23:29,100 --> 00:23:33,450 So as jy op soek is na 'n teks vir die uitdrukking, Julius Caesar, 273 00:23:33,450 --> 00:23:37,740 en jy sien of Gaius Julius Caesar of die naam Julius Caesar in ander tale, 274 00:23:37,740 --> 00:23:44,400 dan kan jy dalk wil ook bietjie gewig toe te ken aan daardie waardes. 275 00:23:44,400 --> 00:23:48,930 En as dit naby genoeg is - as dit oor 'n sekere drumpel - dan is jy wil 276 00:23:48,930 --> 00:23:50,860 staat te wees om Julius Caesar te aanvaar. 277 00:23:50,860 --> 00:24:00,580 So is daar 'n paar verskillende toepassings daarvoor in 'n paar ander tale. 278 00:24:02,580 --> 00:24:08,420 Hier is 'n paar ander instrumente, Regex Pal - 'n handige klein artikels aanlyn te 279 00:24:08,420 --> 00:24:12,190 kyk of jou gereelde uitdrukkings korrek saamgestel is. 280 00:24:12,190 --> 00:24:18,500 Daar is ook selfstandige gereedskap wat jy kan hardloop vanaf jou lessenaar 281 00:24:18,500 --> 00:24:22,100 soos Ultra Pico, en so goed as net kookboeke. 282 00:24:22,100 --> 00:24:25,410 So as jy besig met 'n projek wat behels 'n ton van die gereelde uitdrukkings 283 00:24:25,410 --> 00:24:29,810 dit is waarskynlik die plek om te gaan buite die bestek van vandag. 284 00:24:31,520 --> 00:24:35,770 En dan net om te gee jou 'n gevoel van hoe algemeen dit is 285 00:24:35,770 --> 00:24:44,090 daar is grep in Unix, Perl het 'n ingeboude in, en C is daar PCRE vir C. 286 00:24:44,090 --> 00:24:48,890 En dan sal al die ander tale ook gereelde uitdrukking pakkette 287 00:24:48,890 --> 00:24:52,020 wat werk met basies dieselfde sintaks ons het 'n voorsmakie van vandag. 288 00:24:52,020 --> 00:24:54,790 PHP, Java, Ruby, en so aan. 289 00:24:56,080 --> 00:24:58,980 >> Google Code Search is eintlik noemenswaardig nie, dit is een van die 290 00:24:58,980 --> 00:25:05,720 relatief min programme daar buite wat kan die publiek om toegang te verkry 291 00:25:05,720 --> 00:25:07,800 sy databasis met behulp van gereelde uitdrukkings. 292 00:25:07,800 --> 00:25:12,920 So as jy kyk op Google Code Search kan jy kode 293 00:25:12,920 --> 00:25:16,880 As jy op soek is na 'n voorbeeld van hoe 'n funksie kan gebruik word, 294 00:25:16,880 --> 00:25:21,610 jy kan 'n gewone uitdrukking gebruik dat die funksie wat gebruik word in alle vorme van verskillende gevalle te vind. 295 00:25:21,610 --> 00:25:28,000 Jy kan kyk vir fwrite, en dan kan jy kyk vir die vlag van lees of skryf 296 00:25:28,000 --> 00:25:32,000 As jy wil 'n voorbeeld van fwrite wat gebruik word in daardie geval. 297 00:25:33,530 --> 00:25:37,010 So dieselfde ding daar, en hier is 'n paar verwysings. 298 00:25:37,010 --> 00:25:40,990 Dit sal ook aanlyn beskikbaar wees, so gaan vorentoe as 299 00:25:40,990 --> 00:25:45,560 jy wil om te kyk na Python, grep, Perl - jy wil net 'n inspirasie te kry 300 00:25:45,560 --> 00:25:50,650 of as jy meer wil om te kyk na die teorie hier is 'n paar goed af te spring plekke. 301 00:25:50,650 --> 00:25:53,870 Baie dankie. 302 00:25:58,470 --> 00:25:59,910 [CS50.TV]