1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Szeminárium: Pattern Matching reguláris kifejezésekkel] 2 00:00:02,000 --> 00:00:04,000 [John Mussman-Harvard Egyetem] 3 00:00:04,000 --> 00:00:07,220 [Ez CS50.-CS50.TV] 4 00:00:07,780 --> 00:00:11,610 Oké. Nos, üdvözlök mindenkit. Ez CS50 2012. 5 00:00:11,780 --> 00:00:16,610 A nevem John, és fogok beszélni ma a reguláris kifejezéseket. 6 00:00:16,610 --> 00:00:22,530 A reguláris kifejezések elsősorban egy eszköz, hanem néha 7 00:00:22,530 --> 00:00:28,650 A kód aktív lényegében megfelelő minták és vonósok. 8 00:00:28,650 --> 00:00:33,800 Tehát itt egy internetes képregény a xkcd. 9 00:00:34,440 --> 00:00:42,370 Ebben képregény van egy rejtélyes gyilkosság, ahol a gyilkos 10 00:00:42,370 --> 00:00:47,860 követte valaki nyaralni, és a főszereplők kell 11 00:00:47,860 --> 00:00:52,500 keresgélni 200 megabájt mailek keres egy címet. 12 00:00:52,500 --> 00:00:56,090 És arról, hogy adja fel, ha valaki, aki tudja, hogy a reguláris kifejezések - 13 00:00:56,090 --> 00:01:00,550 feltehetően a szuperhős - csap le és ír egy kódot 14 00:01:00,550 --> 00:01:02,970 és megoldja a gyilkossági rejtély. 15 00:01:02,970 --> 00:01:07,370 Így feltételezhetően az, hogy lesz valami, akkor felhatalmazott 16 00:01:07,370 --> 00:01:09,370 után a szemináriumon. 17 00:01:09,370 --> 00:01:12,250 Mi csak lesz tömör bevezetés a nyelv 18 00:01:12,250 --> 00:01:16,770 és kapsz elég pénze, hogy menjen utána több forrást a saját. 19 00:01:17,680 --> 00:01:21,700 >> Így néz ki a reguláris kifejezések alapvetően, mint ez. 20 00:01:22,930 --> 00:01:25,550 Ez a reguláris kifejezés Ruby. 21 00:01:25,550 --> 00:01:29,280 Ez nem igazán különbözik a különböző nyelveken. 22 00:01:29,690 --> 00:01:37,630 Mi már csak a vágás kezdődik, és jelölje meg a reguláris kifejezést Ruby. 23 00:01:37,630 --> 00:01:42,880 És ez egy reguláris kifejezés keresni e-mail cím mintát. 24 00:01:42,880 --> 00:01:49,160 Tehát azt látjuk, az első bit keres bármilyen alfanumerikus karakter. 25 00:01:50,500 --> 00:01:54,880 Ez azért van, mert e-mail címét gyakran meg kell kezdeni egy betű. 26 00:01:55,460 --> 00:01:59,330 És akkor minden speciális karaktert, majd a @ szimbólumot. 27 00:01:59,330 --> 00:02:03,260 És akkor ugyanaz a domain név. 28 00:02:03,260 --> 00:02:10,030 És akkor a 2 és 4 karakter keresni a. Com,. Net, és így tovább. 29 00:02:10,850 --> 00:02:13,200 Szóval ez egy másik példa a reguláris kifejezés. 30 00:02:13,200 --> 00:02:17,270 Tehát reguláris kifejezések protokollok találni minták a szövegben. 31 00:02:17,270 --> 00:02:21,130 Ők összehasonlítások, kiválasztott, és a csere. 32 00:02:21,690 --> 00:02:27,970 Tehát egy harmadik példa megtalálni az összes telefonszámot végződő 54 egy könyvtárban. 33 00:02:27,970 --> 00:02:34,360 Szóval mielőtt Dávid rip fel CS50 könyvtár tudtunk keresni 34 00:02:34,360 --> 00:02:40,450 a minta, ahol van zárójelben, és 3 számot, akkor vége zárójel, 35 00:02:40,450 --> 00:02:44,070 3. több számot, a kötőjel, 2 szám, majd a 54. 36 00:02:44,070 --> 00:02:48,310 És ez lényegében, hogy hogyan jön létre a reguláris kifejezést keresni ezt. 37 00:02:49,150 --> 00:02:52,960 >> Tehát vannak - tettünk néhány dolgot CS50, amelyek egy kicsit, mint 38 00:02:52,960 --> 00:02:59,740 reguláris kifejezések, így - például - a dictionary.C fájlban 39 00:02:59,740 --> 00:03:04,720 A helyesírás-ellenőrzés problémát meg lehet, hogy használt fscanf 40 00:03:04,720 --> 00:03:07,930 olvasni egy szót a szótárban. 41 00:03:07,930 --> 00:03:16,240 És láthatjuk a százalékos 45s keres egy sor 45 karakter. 42 00:03:16,240 --> 00:03:20,020 Tehát ez valamivel, mint egy kezdetleges reguláris kifejezés. 43 00:03:21,150 --> 00:03:26,060 És akkor bármilyen 45 karakter, amely illik a számlát ott 44 00:03:26,060 --> 00:03:28,080 és vedd fel azt. 45 00:03:28,080 --> 00:03:33,480 És akkor a második példa a legutóbbi webes programozási feladat 46 00:03:33,480 --> 00:03:40,760 meg a disztribúció kódot php valójában van egy egyszerű reguláris kifejezés. 47 00:03:40,760 --> 00:03:46,790 És ez az ember egyszerűen csak keres, hogy ellenőrizze, az internetes oldalt, hogy telt el 48 00:03:46,790 --> 00:03:51,940 illeszkedik vagy a belépéssel vagy a kilépéssel regisztrálj. PHP. 49 00:03:52,220 --> 00:03:57,910 És akkor vissza igaz vagy hamis alapuló reguláris kifejezések illesztése. 50 00:03:59,400 --> 00:04:01,740 >> Szóval mikor reguláris kifejezés? 51 00:04:01,740 --> 00:04:04,820 Miért van itt ma? 52 00:04:05,330 --> 00:04:08,480 Szóval nem kívánja használni reguláris kifejezést, ha van valami, ami 53 00:04:08,480 --> 00:04:11,640 ez a munka az Ön számára is könnyebben. 54 00:04:11,640 --> 00:04:15,510 Így az XML és a HTML valóban nagyon bonyolult 55 00:04:15,510 --> 00:04:18,480 írni reguláris kifejezések, mint látni fogjuk, egy kicsit. 56 00:04:19,110 --> 00:04:23,280 Tehát vannak külön elemzők számára nyelven. 57 00:04:24,170 --> 00:04:30,060 Azt is meg kell, hogy rendben van a kompromisszumokra, és a pontosság gyakran. 58 00:04:30,060 --> 00:04:36,220 Ha megpróbálod - így látta a reguláris kifejezés egy e-mail cím, 59 00:04:37,370 --> 00:04:42,590 de azt mondják, hogy volna egy adott e-mail címét, és fokozatosan a 60 00:04:42,590 --> 00:04:48,570 reguláris kifejezés lehet, hogy egyre bonyolultabbak lesznek lett pontosabb. 61 00:04:49,580 --> 00:04:52,260 Szóval ez lenne az egyik kompromisszum. 62 00:04:52,260 --> 00:04:55,330 Meg kell bizonyosodni arról, hogy rendben van, hogy a reguláris kifejezés. 63 00:04:55,330 --> 00:04:57,920 Ha pontosan tudja, mit keres akkor lehet, hogy több értelme van 64 00:04:57,920 --> 00:05:02,070 , hogy az időt és írjon egy hatékonyabb elemző. 65 00:05:02,070 --> 00:05:06,980 És végül van egy történelmi kérdés a rendszeresség 66 00:05:06,980 --> 00:05:08,940 kifejezések és nyelvek. 67 00:05:08,940 --> 00:05:12,960 A reguláris kifejezések valójában sokkal erősebb, mint a 68 00:05:12,960 --> 00:05:16,450 reguláris kifejezések egy mondjuk egy formális értelemben. 69 00:05:17,130 --> 00:05:20,150 >> Szóval nem akarom, hogy túl messzire megy a formális elmélet 70 00:05:20,150 --> 00:05:24,000 de a legtöbb nyelv, amit kód valójában nem szabályos. 71 00:05:24,000 --> 00:05:29,110 És ez az, amiért a reguláris kifejezések néha nem tekinthető minden biztonságos. 72 00:05:29,670 --> 00:05:33,150 Tehát alapvetően van egy Chomsky hierarchia a nyelvek, 73 00:05:33,150 --> 00:05:38,400 és reguláris kifejezések épülnek fel a szakszervezet, összefűzése, 74 00:05:38,400 --> 00:05:41,810 és a Kleene csillag művelet látni fogjuk néhány perc alatt. 75 00:05:43,130 --> 00:05:48,860 Ha érdekel, elvileg van elég sok folyik ott a motorháztető alatt. 76 00:05:50,360 --> 00:05:55,880 >> Így a rövid története - csak a kontextus itt - rendszeres készletek jött 77 00:05:55,880 --> 00:05:59,580 Az 1950-es években, és akkor volt egyszerű szerkesztők, hogy 78 00:05:59,580 --> 00:06:03,300 beépített reguláris kifejezések - csak keres szálakat. 79 00:06:03,570 --> 00:06:09,110 Grep - amely egy parancssori eszköz - egyike volt az első 80 00:06:09,110 --> 00:06:14,160 nagyon népszerű eszközök beépített reguláris kifejezések a 1960-as években. 81 00:06:14,160 --> 00:06:20,560 A 80-as években, Perl épült - egy programozási nyelv, amely 82 00:06:20,560 --> 00:06:24,110 magában reguláris kifejezések nagyon jól. 83 00:06:24,550 --> 00:06:30,130 Aztán újabban már volt Perl kompatibilis reguláris kifejezések 84 00:06:30,130 --> 00:06:35,870 protokollok alapvetően más nyelveken használó sok ugyanazt a szintaxist. 85 00:06:36,630 --> 00:06:39,840 Természetesen a legfontosabb esemény volt 2008-ban 86 00:06:39,840 --> 00:06:43,040 ahol nem volt az első nemzeti reguláris kifejezések nap, 87 00:06:43,040 --> 00:06:47,350 ami véleményem szerint június 1, ha szeretné ünnepelni ezt. 88 00:06:48,430 --> 00:06:50,840 >> Ismét, csak egy kicsit több elmélet itt. 89 00:06:52,180 --> 00:06:55,320 Tehát van egy pár különböző módon építésének reguláris kifejezések. 90 00:06:55,950 --> 00:07:02,050 Egy egyszerű módja, hogy létrejöjjön a kifejezést, hogy fogsz 91 00:07:02,050 --> 00:07:07,500 fut a szöveg értelmezéséhez - alapvetően építeni egy kis mini-program 92 00:07:07,500 --> 00:07:11,870 elemzi darab egy húr, és látni, hogy "Ó, nem ez illeszkedik a reguláris kifejezés, vagy nem?" 93 00:07:12,250 --> 00:07:14,250 Majd futtassa ezt. 94 00:07:14,250 --> 00:07:17,300 Tehát, ha van egy kis reguláris kifejezés, ez valószínűleg 95 00:07:17,300 --> 00:07:19,380 a leghatékonyabb módja annak, hogy csináld. 96 00:07:20,090 --> 00:07:25,420 És akkor, ha - egy másik lehetőség az, hogy a rekonstruálására 97 00:07:25,420 --> 00:07:30,260 kifejezés, ahogy megy, és ez a lehetőség szimulálni. 98 00:07:30,440 --> 00:07:37,690 És ezek a korai kísérletek reguláris kifejezés algoritmusok 99 00:07:37,690 --> 00:07:44,330 viszonylag egyszerű és viszonylag gyors, de nem volt egy nagy rugalmasságot. 100 00:07:44,330 --> 00:07:47,500 Így, hogy még néhány dolgot, hogy fogunk nézni 101 00:07:47,500 --> 00:07:52,860 Ma kellett tennie bonyolultabb reguláris kifejezés 102 00:07:52,860 --> 00:07:56,650 implementációk, amelyek potenciálisan sokkal lassabb, így ez egy olyan dolog, hogy szem előtt tartani 103 00:07:57,510 --> 00:08:02,920 Van még egy reguláris kifejezéseket DoS támadás változatos 104 00:08:02,920 --> 00:08:08,330 hogy kihasználják a potenciál ezen újabb implementációja 105 00:08:08,330 --> 00:08:10,930 reguláris kifejezések, hogy nagyon bonyolult. 106 00:08:11,570 --> 00:08:15,650 És nagyjából ugyanabban az értelemben, hogy láttuk buffer overflow támadások, 107 00:08:15,650 --> 00:08:21,610 Ön támadásokat, hogy a munkát azzal, hogy rekurzív hurkok 108 00:08:21,610 --> 00:08:24,400 lerohanta a memóriakártyák. 109 00:08:24,780 --> 00:08:29,540 És mellesleg Regexen egyik hivatalos többes reguláris kifejezés 110 00:08:29,540 --> 00:08:32,890 analógia útján ökrök az angolszász. 111 00:08:33,500 --> 00:08:40,169 >> Oké, a Python Library sokan itt személynek Mac, 112 00:08:40,169 --> 00:08:43,860 így valóban húzni ezt a képernyőn. 113 00:08:43,860 --> 00:08:47,480 A reguláris kifejezések vannak építve Python. 114 00:08:48,070 --> 00:08:53,020 És így Python előtelepített Mac és interneten is elérhető ezen a linken. 115 00:08:53,770 --> 00:08:57,350 Tehát, ha nézed lehet szüneteltetni, és győződjön meg arról, hogy a Python 116 00:08:58,080 --> 00:09:00,170 ahogy játszunk itt. 117 00:09:00,780 --> 00:09:06,420 Van egy kézi interneten, így ha csak írja Python a számítógép 118 00:09:06,420 --> 00:09:10,500 látni fogja, hogy a verzió jön fel a terminál. 119 00:09:11,070 --> 00:09:17,720 Szóval egy hivatkozást a kézikönyv 2. változat a Python és a puskát. 120 00:09:17,720 --> 00:09:23,100 Van egy 3-as verzió a Python, de a Mac nem feltétlenül 121 00:09:23,100 --> 00:09:25,130 jön, hogy előre. 122 00:09:25,130 --> 00:09:27,360 Tehát nem igazán különbözik. 123 00:09:27,360 --> 00:09:33,270 Oké, így néhány alapvető reguláris kifejezések Python. 124 00:09:34,080 --> 00:09:42,650 >> Tehát itt én egy nagyon egyszerű kifejezést, így tettem Python import re 125 00:09:43,750 --> 00:09:47,070 és aztán az eredmény re.search. 126 00:09:47,070 --> 00:09:49,910 És a keresés tart 2 érveket. 127 00:09:49,910 --> 00:09:56,040 Az első a reguláris kifejezés, a második pedig a szöveg 128 00:09:56,040 --> 00:09:58,290 vagy zsinórt az elemezni kívánt. 129 00:09:58,290 --> 00:10:01,210 Aztán nyomtatja ki a result.group. 130 00:10:01,580 --> 00:10:05,860 Tehát ezek a 2 alapvető funkciókat fogunk látni ma 131 00:10:06,790 --> 00:10:10,170 a tanulás reguláris kifejezéseket. 132 00:10:10,170 --> 00:10:12,880 Tehát csak összeomlanak a reguláris kifejezés itt 133 00:10:12,880 --> 00:10:21,770 h majd \ w, majd így m \ w csak elfogad bármilyen betű ott. 134 00:10:21,850 --> 00:10:26,820 Tehát itt keresünk egy "h", majd egy másik betű 135 00:10:26,820 --> 00:10:30,060 majd m, ezért itt lenne megfelelő sonka 136 00:10:30,060 --> 00:10:34,480 az "Abraham Lincoln és sonkás szendvicset." 137 00:10:35,040 --> 00:10:37,150 Ez annak az eredménye, hogy a csoport. 138 00:10:37,680 --> 00:10:43,130 A másik dolog, amit tehetünk, mielőtt igénybe húrok szövegének Python. 139 00:10:43,130 --> 00:10:46,220 Szóval azt hiszem, akkor megy előre, és húzza, hogy akár itt. 140 00:10:46,220 --> 00:10:49,210 Python import re. 141 00:10:50,070 --> 00:10:54,000 És ha én nem ugyanaz a dolog - mondjuk a szöveg, 142 00:10:55,390 --> 00:11:00,800 "Ábrahám," hadd zoom - ott vagyunk. 143 00:11:01,610 --> 00:11:06,430 Szövege, "Ábrahám eszik sonkát." 144 00:11:07,460 --> 00:11:15,260 Oké, majd a result = re.search. 145 00:11:16,260 --> 00:11:22,020 És akkor a kifejezés lehet h, és meg is teszem dot m. 146 00:11:22,020 --> 00:11:26,280 Tehát pont csak úgy minden karakter, amely nem új sor, beleértve a számokat, 147 00:11:26,280 --> 00:11:28,650 százalék jel, ilyesmi. 148 00:11:28,650 --> 00:11:38,030 És akkor text - boom -, majd result.group-Ja. 149 00:11:38,030 --> 00:11:41,820 Szóval ez csak, hogyan hajtsák végre az alapvető funkciókat itt. 150 00:11:42,300 --> 00:11:55,110 Ha lenne egy szöveges gyűrű - az őrült szöveg - beleértve mondjuk sok osztásjeleknek 151 00:11:55,110 --> 00:12:01,180 és vonósok belül és a dolgok, hogy is néz ki escape szekvenciák, 152 00:12:01,180 --> 00:12:08,480 akkor érdemes használni a nyers szövegbevitel, hogy megbizonyosodjon arról, hogy elfogadják. 153 00:12:08,480 --> 00:12:14,120 És ez csak úgy néz ki, mint ezt. 154 00:12:14,120 --> 00:12:17,810 Tehát, ha kerestünk mindegyik ott kellene nem találtam semmit. 155 00:12:19,070 --> 00:12:21,680 De ez hogyan is hajtják végre, mielőtt a sor 156 00:12:21,680 --> 00:12:24,990 A reguláris kifejezés teszel az R betű. 157 00:12:26,150 --> 00:12:30,260 >> Oké, hadd folyamatosan megy. 158 00:12:30,260 --> 00:12:33,730 Rendben - így nézzük meg néhány ismétlődő minták itt. 159 00:12:34,750 --> 00:12:39,150 Tehát az egyik dolog, amit akarok, hogy ismételje meg a dolgokat 160 00:12:40,040 --> 00:12:42,480 ahogy keres a szövegben. 161 00:12:42,480 --> 00:12:48,300 Tehát, hogy nem egy követ akárhány b - te ab *. 162 00:12:48,630 --> 00:12:51,620 És akkor van egy sor más szabályok is. 163 00:12:51,620 --> 00:12:54,380 És nézd mindezeket fel, én csak végig néhány 164 00:12:54,380 --> 00:12:57,630 leggyakrabban használt is. 165 00:12:57,630 --> 00:13:03,920 Tehát ab + egy követ bármely N 0-nál nagyobb a b. 166 00:13:04,510 --> 00:13:08,000 ab? egy követ 0 vagy 1. A b. 167 00:13:09,190 --> 00:13:18,580 N {ab} egy követ N b, majd így tovább. 168 00:13:18,580 --> 00:13:22,820 Ha 2 szám a zárójelek van meghatározva egy sor 169 00:13:23,300 --> 00:13:25,440 hogy lehet esetleg kiegyenlített. 170 00:13:26,390 --> 00:13:30,420 Így fog kinézni egy pár ismétlődő mintákat egy perc alatt. 171 00:13:31,960 --> 00:13:42,300 Tehát 2 dolgot kell szem előtt tartani, amikor ezeket a minta megfelelő eszközökkel itt. 172 00:13:42,300 --> 00:13:52,120 Tehát mondjuk szeretnénk nézni a HM az "Abraham Lincoln teszi sonkás szendvicset." 173 00:13:52,120 --> 00:13:55,230 Szóval megváltozott Abraham Lincoln nevét Ábrahámnak. 174 00:13:55,230 --> 00:14:00,290 És most keresünk, ami által visszaadott keresési funkció, 175 00:14:00,290 --> 00:14:03,270 és csak akkor tér vissza sonka ebben az esetben. 176 00:14:03,620 --> 00:14:08,080 És ez, mert keresés csak természetesen azon a bal szélső sorban. 177 00:14:08,080 --> 00:14:12,130 És reguláris kifejezések kivéve, ha másképpen is csinálni. 178 00:14:12,830 --> 00:14:18,880 Ha akartuk, hogy megtalálja az összes van egy funkció, amely - megtalálja az összes. 179 00:14:18,880 --> 00:14:35,100 Tehát, ami éppen néz ki, mint az összes = re.findall (h.m ", szöveg) 180 00:14:35,100 --> 00:14:44,540 majd all.group (). 181 00:14:44,540 --> 00:14:51,040 Minden gyárt mind sonka és a sonka, ebben az esetben mindkét húrok Ábrahám sonka. 182 00:14:51,610 --> 00:14:55,110 Annak érdekében, hogy egy másik lehetőség. 183 00:14:56,250 --> 00:15:06,940 >> Remek. A másik dolog, hogy tartsa szem előtt, hogy a reguláris kifejezések, hogy a legnagyobb intuitív. 184 00:15:06,940 --> 00:15:09,520 Nézzük ezt a példát. 185 00:15:10,200 --> 00:15:16,070 Mi volt, hogy a bal szélső keresést itt, aztán megpróbált egy nagyobb kereső 186 00:15:16,070 --> 00:15:18,800 a Kleene csillag operátor. 187 00:15:18,800 --> 00:15:24,180 Tehát, "Abraham Lincoln teszi sonkás szendvics", és én csak kaptam vissza 188 00:15:24,180 --> 00:15:26,280 m ennek eredményeként. 189 00:15:26,280 --> 00:15:31,670 Ennek oka az, hogy a hiba az volt, hogy tudtam volna akárhány 190 00:15:31,670 --> 00:15:36,140 h azért van, mert nem adja meg semmit, hogy menjen be a H és m. 191 00:15:36,140 --> 00:15:42,010 Az egyetlen példa, hogy ott volt, m - az egyetlen példa ott m is 192 00:15:42,010 --> 00:15:46,220 és tetszőleges számú H éppen a húr m. 193 00:15:46,490 --> 00:15:51,850 Aztán megpróbáltam újra, azt mondtam: "Rendben, térjünk a tényleges legnagyobb csoport itt." 194 00:15:51,850 --> 00:15:59,670 És akkor én h. * M, hogy csak vissza tetszőleges számú karakter a H és m. 195 00:16:00,280 --> 00:16:02,950 És ha csak most kezdik el, és gondolkodás, "Oké, ez jól 196 00:16:02,950 --> 00:16:11,560 értem sonka, "valójában tart mindent a h Abraham Lincoln 197 00:16:11,560 --> 00:16:13,690 egészen a végéig sonka. 198 00:16:14,040 --> 00:16:18,110 Ez kapzsi, látja h - mindez más szöveg - m, 199 00:16:18,110 --> 00:16:21,280 és ez az, amit úgy be 200 00:16:22,060 --> 00:16:27,480 Ez különösen hallatlan - ez egy olyan funkció, mi is 201 00:16:27,480 --> 00:16:30,670 meg mert nem mohó egyéb funkcióinak használata. 202 00:16:31,480 --> 00:16:34,490 De ez az, amit meg kell szem előtt tartani, különösen 203 00:16:34,490 --> 00:16:38,720 ha ránézünk HTML szöveget, ami az egyik oka annak, hogy 204 00:16:38,720 --> 00:16:41,500 reguláris kifejezések nehéz HTML. 205 00:16:42,460 --> 00:16:46,310 Mert ha van egy nyitott HTML tag, majd sok-sok dolgot a közepén 206 00:16:46,310 --> 00:16:49,820 , majd néhány más HTML zárt tag sokkal később a programban, 207 00:16:49,820 --> 00:16:55,420 éppen most ettem egy csomó HTML kód esetleg véletlenül. 208 00:16:56,200 --> 00:17:01,840 >> Rendben - így több speciális karaktereket, mint sok más nyelven, 209 00:17:01,840 --> 00:17:04,780 menekülni a perjel. 210 00:17:04,780 --> 00:17:10,329 Így tudjuk használni a pont, hogy meg bármilyen karakter, kivéve egy új sort. 211 00:17:10,329 --> 00:17:14,550 Tudjuk használni az escape w adja minden betű. 212 00:17:14,550 --> 00:17:20,329 És értelemszerűen escape d minden egész - numerikus karakter. 213 00:17:20,630 --> 00:17:27,440 Tudjuk meg - tudjuk használni zárójelben adja a kapcsolódó kifejezések. 214 00:17:27,440 --> 00:17:30,970 Tehát ez elfogadná a, b, c. 215 00:17:31,320 --> 00:17:37,000 És azt is meg, vagy lehetőséget vagy a vagy b. 216 00:17:37,000 --> 00:17:41,110 Például - ha kerestek több lehetőség 217 00:17:41,110 --> 00:17:44,940 zárójelben tudtuk használni a vagy az üzemeltető, mint - 218 00:17:44,940 --> 00:17:52,480 úgyhogy menjünk vissza ezt a példát itt. 219 00:17:53,000 --> 00:17:59,790 És most nézzük, hogy - menjünk vissza erre példa itt, majd 220 00:17:59,790 --> 00:18:12,290 hogy ae - így ez vissza - Azt hiszem, ez még mindig Ábrahám. 221 00:18:12,290 --> 00:18:17,410 Tehát ez - ha nem minden - nagyszerű. 222 00:18:17,410 --> 00:18:22,700 Tehát hadd frissítse a szöveg itt. 223 00:18:22,700 --> 00:18:34,690 "Abraham eszik sonkát, miközben hümmögés a -, míg szegés." Remek. 224 00:18:44,090 --> 00:18:47,330 All. Remek. Most, hogy sonka, sonka, és a szegély. 225 00:18:48,510 --> 00:18:59,370 Míg szegés - miközben dúdolt neki -, míg a szegély dúdolt neki. Remek. 226 00:19:00,350 --> 00:19:03,250 Ugyanaz. 227 00:19:03,820 --> 00:19:09,180 Most minden visszatér még csak sonka, sonka, és a szegély nélkül felvette a zúgás vagy az őt. 228 00:19:09,940 --> 00:19:22,600 Nagy - Mi van, ha azt akartuk, hogy nézni sem, hogy - így is csinálni 229 00:19:23,510 --> 00:19:33,810 őt, vagy - mi jön vissza, hogy a. 230 00:19:34,810 --> 00:19:45,760 Oké - így - minden rendben - pozícióban is használható a kalap, vagy a dollár jel 231 00:19:45,760 --> 00:19:49,350 pontosítani, hogy mit keres valamit, az elején vagy a végén egy string. 232 00:19:50,260 --> 00:19:52,260 Vagy a start vagy a végén egy szót sem. 233 00:19:52,400 --> 00:19:54,470 Ez az egyik módja, hogy használja ezt. 234 00:19:55,630 --> 00:20:01,160 >> Oké - így hadd játék körül egy kicsit nagyobb szövegrészt. 235 00:20:03,950 --> 00:20:08,310 Mondjuk ez a sor itt - ez a kijelentés itt. 236 00:20:08,310 --> 00:20:11,360 A hatalom a reguláris kifejezés, hogy ők is meg mintákat 237 00:20:11,360 --> 00:20:13,390 nem csak a fix karakterek. 238 00:20:14,900 --> 00:20:18,790 Engedje meg, hogy - nevezzük ezt a blokkot. 239 00:20:22,400 --> 00:20:27,110 Aztán fogja olvasni az összes, hogy in 240 00:20:28,890 --> 00:20:50,820 És akkor van egy - tegyük all =, akkor mi van néhány dolog, amit lehet keresni itt nyereséges? 241 00:20:50,820 --> 00:20:54,070 Tudtuk meg a kifejezést fül. 242 00:20:55,050 --> 00:21:01,520 Nem túl érdekes. Ehhez mit szólsz? Meglátjuk, mi történik. 243 00:21:03,710 --> 00:21:05,710 Adtam egy probléma. 244 00:21:06,380 --> 00:21:10,750 Így tetszőleges számú dolog, mielőtt újra, meg minden. 245 00:21:10,750 --> 00:21:15,630 Annak érdekében, hogy vissza kell adnia mindent a kezdetektől, hogy valamennyi, talán egy-két alkalommal. 246 00:21:18,800 --> 00:21:21,970 És akkor itt van a hatalom reguláris kifejezések, hogy azok 247 00:21:21,970 --> 00:21:24,900 Megadhatja minták nem csak karakter van itt. 248 00:21:24,900 --> 00:21:28,510 Így egészen a végső re indult, a bal szélső, és kapzsi. 249 00:21:30,710 --> 00:21:32,710 Lássuk, - mi mást lehetne keresni. 250 00:21:32,710 --> 00:21:39,860 Azt hiszem, az egyik dolog, ha voltak kíváncsiak keresi a névmások ő és ő 251 00:21:39,860 --> 00:21:44,600 akkor ellenőrizze, s egyenlő a 0 vagy 1 252 00:21:44,600 --> 00:21:49,710 és a kifejezés is, és ez valószínűleg nem fog visszatérni - 253 00:21:49,710 --> 00:21:58,020 Ó, azt hiszem, ő vissza, mert keresünk a hatalom, hogy a nap, itt van. 254 00:22:00,590 --> 00:22:06,270 Próbáljuk meghatározzák, hogy ez, hogy jöjjön a kezdete valami. 255 00:22:06,640 --> 00:22:09,530 Lássuk, hogy leesik. 256 00:22:09,530 --> 00:22:19,630 Így nem tehetünk zsír, és nem kapunk semmit, mert ő és ő 257 00:22:19,630 --> 00:22:22,870 nem fordul elő ez a kifejezés. 258 00:22:24,960 --> 00:22:30,410 Remek. Oké - így hát a macska itt. 259 00:22:30,410 --> 00:22:35,720 Így bonyolult minták hátrányosan érinti az agyban. 260 00:22:35,720 --> 00:22:40,500 Szóval ez az, ezért reguláris kifejezéseket, hogy elkerüljék ezeket a kérdéseket. 261 00:22:40,820 --> 00:22:43,520 >> Tehát itt van néhány egyéb hasznos mód lehet játszani körül. 262 00:22:43,520 --> 00:22:50,290 Néztük keresés ma, de akkor is használhatja meccs, split, findall és csoportok. 263 00:22:50,290 --> 00:22:53,970 Így egyéb jó dolog, amit tehetünk a reguláris kifejezések mellett csak 264 00:22:53,970 --> 00:22:58,870 keres mintákat vesz mintát, és tartja a mérkőzések - 265 00:22:58,870 --> 00:23:02,530 változója -, majd használja ezeket a kódban később. 266 00:23:02,850 --> 00:23:05,980 Ez lehet igen hasznos. Más dolog, lehet, hogy számít. 267 00:23:05,980 --> 00:23:11,720 Így tudjuk számolni a példa, hogy egy reguláris kifejezés minta, 268 00:23:11,720 --> 00:23:13,960 és ez az, amit tudunk használni csoportokat. 269 00:23:13,960 --> 00:23:17,550 És más közlekedési módok is is lehetséges. 270 00:23:18,040 --> 00:23:22,980 Szóval csak azt szeretném, hogy beszéljünk egy kicsit többet a más módon lehet reguláris kifejezéseket. 271 00:23:22,980 --> 00:23:29,100 >> Tehát az egyik fejlettebb alkalmazás a fuzzy matching. 272 00:23:29,100 --> 00:23:33,450 Tehát, ha keres egy szöveget a kifejezést, Julius Caesar, 273 00:23:33,450 --> 00:23:37,740 és látod, vagy Gaius Julius Caesar, vagy a név Julius Caesar más nyelveken, 274 00:23:37,740 --> 00:23:44,400 akkor is szeretne hozzá némi súlyt ezeket az értékeket. 275 00:23:44,400 --> 00:23:48,930 És ha elég közel van -, ha átmegy egy bizonyos küszöbértéket -, akkor akar 276 00:23:48,930 --> 00:23:50,860 , hogy képes legyen fogadni Julius Caesar. 277 00:23:50,860 --> 00:24:00,580 Tehát van egy pár különböző megvalósítások, hogy néhány más nyelven is. 278 00:24:02,580 --> 00:24:08,420 Íme néhány további eszközök Regex Pal - egy hasznos kis alkalmazás online 279 00:24:08,420 --> 00:24:12,190 ellenőrizze, hogy a reguláris kifejezések állnak-e. 280 00:24:12,190 --> 00:24:18,500 Vannak önálló eszközök, amelyek segítségével futtatni az asztali 281 00:24:18,500 --> 00:24:22,100 mint Ultra Pico, és csakúgy, mint csak a szakácskönyvek. 282 00:24:22,100 --> 00:24:25,410 Tehát, ha csinálsz egy projekt, amely magában foglalja egy csomó reguláris kifejezések 283 00:24:25,410 --> 00:24:29,810 valószínűleg ez a hely, hogy menjen kívül esnek a mai. 284 00:24:31,520 --> 00:24:35,770 És akkor csak hogy egyfajta milyen gyakori, hogy 285 00:24:35,770 --> 00:24:44,090 van grep a Unix, Perl beépített, és C van PCRE a C. 286 00:24:44,090 --> 00:24:48,890 És akkor az összes többi nyelv is reguláris kifejezés csomagok 287 00:24:48,890 --> 00:24:52,020 hogy működnek lényegében ugyanazt a szintaxist kaptunk egy kis ízelítőt a ma. 288 00:24:52,020 --> 00:24:54,790 PHP, Java, Ruby, és így tovább. 289 00:24:56,080 --> 00:24:58,980 >> Google Code Search valóban említésre méltó, hogy az egyik 290 00:24:58,980 --> 00:25:05,720 viszonylag kevés program található, amely lehetővé teszi a nyilvános hozzáférést 291 00:25:05,720 --> 00:25:07,800 az adatbázis reguláris kifejezések segítségével. 292 00:25:07,800 --> 00:25:12,920 Tehát, ha megnézi a Google Code Search találsz kódot 293 00:25:12,920 --> 00:25:16,880 ha keres egy példányát, hogy egy függvény lehet használni, 294 00:25:16,880 --> 00:25:21,610 akkor a reguláris kifejezést találni ezt a funkciót használják mindenféle különböző esetben. 295 00:25:21,610 --> 00:25:28,000 Lehet keresni fwrite, és akkor lehet nézni a zászló írni, olvasni 296 00:25:28,000 --> 00:25:32,000 ha volna egy példát fwrite használják ebben az esetben. 297 00:25:33,530 --> 00:25:37,010 Tehát ugyanaz a dolog ott, és itt van néhány hivatkozás. 298 00:25:37,010 --> 00:25:40,990 Ez lesz elérhető online is, így lesz, ha előre 299 00:25:40,990 --> 00:25:45,560 szeretné nézni Python, grep, Perl - csak azt, hogy egy kis ihletet 300 00:25:45,560 --> 00:25:50,650 vagy ha azt szeretné, hogy inkább az elmélet itt van néhány jó leugranak helyeken. 301 00:25:50,650 --> 00:25:53,870 Köszönöm szépen. 302 00:25:58,470 --> 00:25:59,910 [CS50.TV]