1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Seminar: model de potrivire cu expresii regulate] 2 00:00:02,000 --> 00:00:04,000 [John Mussman-Universitatea Harvard] 3 00:00:04,000 --> 00:00:07,220 [Acest lucru este CS50.-CS50.TV] 4 00:00:07,780 --> 00:00:11,610 Bine. Ei bine, bun venit toată lumea. Acest lucru este CS50 2012. 5 00:00:11,780 --> 00:00:16,610 Numele meu este John, și voi vorbi astazi despre expresii regulate. 6 00:00:16,610 --> 00:00:22,530 Expresii regulate este în primul rând un instrument, dar, de asemenea, folosit uneori 7 00:00:22,530 --> 00:00:28,650 în cod în mod activ pentru a se potrivi în esență, modele și siruri de caractere. 8 00:00:28,650 --> 00:00:33,800 Deci, aici e un comic web de la xkcd. 9 00:00:34,440 --> 00:00:42,370 In acest comic este un mister crima în care criminalul a 10 00:00:42,370 --> 00:00:47,860 a urmat cineva în vacanță, iar protagoniștii trebuie să 11 00:00:47,860 --> 00:00:52,500 căuta prin 200 de megabytes de e-mailuri în căutarea pentru o adresă. 12 00:00:52,500 --> 00:00:56,090 Și ei sunt pe cale să renunțe la cineva care știe expresii regulate - 13 00:00:56,090 --> 00:01:00,550 probabil un super-erou - coboară în jos și scrie unele cod 14 00:01:00,550 --> 00:01:02,970 și rezolvă misterul crimei. 15 00:01:02,970 --> 00:01:07,370 Deci, probabil că va fi ceva care va fi împuternicită să facă 16 00:01:07,370 --> 00:01:09,370 După acest seminar. 17 00:01:09,370 --> 00:01:12,250 Noi sunt doar de gând să ofere o introducere concisă a limbii 18 00:01:12,250 --> 00:01:16,770 și vă va oferi suficient de mijloacele necesare pentru a merge după mai multe resurse pe cont propriu. 19 00:01:17,680 --> 00:01:21,700 >> Expresii atât de regulate arata practic ca aceasta. 20 00:01:22,930 --> 00:01:25,550 Aceasta este o expresie regulată în Ruby. 21 00:01:25,550 --> 00:01:29,280 Acesta nu este teribil de diferite în limbi. 22 00:01:29,690 --> 00:01:37,630 Avem doar pe slash-uri pentru a începe și marca expresie regulată în Ruby. 23 00:01:37,630 --> 00:01:42,880 Și aceasta este o expresie regulată pentru a căuta în e-mail model adresa. 24 00:01:42,880 --> 00:01:49,160 Deci ne vedem la primul bit cauta orice caracter alfanumeric. 25 00:01:50,500 --> 00:01:54,880 Asta se datorează faptului că adresele de e-mail au de multe ori să înceapă cu un caracter alfabetic. 26 00:01:55,460 --> 00:01:59,330 Și atunci orice caracter special, urmat de simbolul @. 27 00:01:59,330 --> 00:02:03,260 Și apoi același lucru pentru nume de domeniu. 28 00:02:03,260 --> 00:02:10,030 Și apoi între 2 și 4 caractere să caute. Com,. Net, și așa mai departe. 29 00:02:10,850 --> 00:02:13,200 Astfel că este un alt exemplu de expresie regulata. 30 00:02:13,200 --> 00:02:17,270 Expresii atât de regulate sunt protocoale pentru a găsi tipare în text. 31 00:02:17,270 --> 00:02:21,130 Ei fac comparații, selecții, și înlocuiri. 32 00:02:21,690 --> 00:02:27,970 Deci, un al treilea exemplu este de a găsi toate numerele de telefon care se termină în 54 într-un director. 33 00:02:27,970 --> 00:02:34,360 Deci, înainte de David rupe până directorul CS50 am putea căuta 34 00:02:34,360 --> 00:02:40,450 un model de care avem paranteze apoi 3 numere apoi termina paranteze, 35 00:02:40,450 --> 00:02:44,070 3 mai multe numere, de o liniuță, 2 numere, și apoi 54. 36 00:02:44,070 --> 00:02:48,310 Și că ar fi în esență modul în care vom veni cu o expresie regulată pentru a căuta pentru asta. 37 00:02:49,150 --> 00:02:52,960 >> Deci, există - noi am făcut unele lucruri în CS50, care sunt un pic ca 38 00:02:52,960 --> 00:02:59,740 expresii regulate, astfel încât - de exemplu - în fișierul dictionary.C 39 00:02:59,740 --> 00:03:04,720 pentru Spell Check set de probleme ați fi putut folosi fscanf 40 00:03:04,720 --> 00:03:07,930 pentru a citi într-un cuvânt din dicționar. 41 00:03:07,930 --> 00:03:16,240 Și puteți vedea 45 de ani procentul este în căutarea pentru un șir de 45 de caractere. 42 00:03:16,240 --> 00:03:20,020 Deci, este oarecum ca o expresie regulată rudimentar. 43 00:03:21,150 --> 00:03:26,060 Și tu poți avea orice 45 de caractere care se potrivesc proiectul de lege acolo 44 00:03:26,060 --> 00:03:28,080 și alege cele sus. 45 00:03:28,080 --> 00:03:33,480 Și apoi al doilea exemplu în cea mai recentă problemă de programare web 46 00:03:33,480 --> 00:03:40,760 stabilit în codul de distribuție pentru php noi de fapt nu au o expresie regulată simplu. 47 00:03:40,760 --> 00:03:46,790 Și acesta este doar pur și simplu în căutarea de a verifica dacă pagina de web, care este trecut în 48 00:03:46,790 --> 00:03:51,940 potrivește fie autentificarea sau dezautentificarea înregistrați. PHP. 49 00:03:52,220 --> 00:03:57,910 Și apoi se întoarce adevărat sau fals bazat pe care potrivire expresie regulată. 50 00:03:59,400 --> 00:04:01,740 >> Deci, atunci când folosiți expresie regulată? 51 00:04:01,740 --> 00:04:04,820 De ce ești aici azi? 52 00:04:05,330 --> 00:04:08,480 Deci, nu doriți să utilizați expresii regulate atunci când există ceva care 53 00:04:08,480 --> 00:04:11,640 are loc de muncă pentru tine, chiar mai ușor. 54 00:04:11,640 --> 00:04:15,510 Deci, XML și HTML sunt de fapt destul de complicat 55 00:04:15,510 --> 00:04:18,480 a scrie expresii regulate pentru ca vom vedea într-un pic. 56 00:04:19,110 --> 00:04:23,280 Deci, există interpretoare dedicate pentru aceste limbi. 57 00:04:24,170 --> 00:04:30,060 De asemenea, aveți nevoie pentru a fi în regulă cu compromisuri și precizie frecvent. 58 00:04:30,060 --> 00:04:36,220 Dacă se încearcă - așa că am văzut o expresie regulată pentru o adresă de e-mail, 59 00:04:37,370 --> 00:04:42,590 dar spun ai vrut o adresă de e-mail specifice și, treptat, 60 00:04:42,590 --> 00:04:48,570 expresie regulată ar putea deveni mult mai complex, deoarece a devenit mult mai precis. 61 00:04:49,580 --> 00:04:52,260 Așa că ar fi un compromis. 62 00:04:52,260 --> 00:04:55,330 Trebuie să fiți sigur că vă sunt bine face cu expresia regulată. 63 00:04:55,330 --> 00:04:57,920 Dacă știți exact ceea ce cauți pentru că s-ar putea face mai mult sens 64 00:04:57,920 --> 00:05:02,070 pentru a pune în timp și a scrie un parser mai eficient. 65 00:05:02,070 --> 00:05:06,980 Și, în sfârșit există o problemă istorică cu regularitate 66 00:05:06,980 --> 00:05:08,940 de expresii și limbi. 67 00:05:08,940 --> 00:05:12,960 Expresiile regulate sunt de fapt mult mai puternic decât 68 00:05:12,960 --> 00:05:16,450 expresii regulate pe spune într-un sens formal. 69 00:05:17,130 --> 00:05:20,150 >> Deci, eu nu vreau să merg prea departe în teorie formală, 70 00:05:20,150 --> 00:05:24,000 dar cele mai multe limbi pe care le codul de fapt, nu sunt regulate. 71 00:05:24,000 --> 00:05:29,110 Și acesta este motivul pentru expresii regulate, uneori, nu sunt considerate tot ca sigur. 72 00:05:29,670 --> 00:05:33,150 Deci, practic nu există o ierarhie Chomsky de limbi, 73 00:05:33,150 --> 00:05:38,400 și expresii regulate sunt construite cu ajutorul Uniunii, concatenare, 74 00:05:38,400 --> 00:05:41,810 și funcționarea Kleene stele, pe care le vom vedea în câteva minute. 75 00:05:43,130 --> 00:05:48,860 Dacă sunteți interesat în teorie, există destul de multe pe acolo sub capota. 76 00:05:50,360 --> 00:05:55,880 >> Deci, un scurt istoric - doar pentru contextul aici - seturi regulate de venit 77 00:05:55,880 --> 00:05:59,580 în anii 1950, iar apoi am avut editori simple care 78 00:05:59,580 --> 00:06:03,300 încorporate expresii regulate - doar în căutarea pentru siruri de caractere. 79 00:06:03,570 --> 00:06:09,110 Grep - care este un instrument de linie de comandă - a fost una din primele 80 00:06:09,110 --> 00:06:14,160 instrumente foarte popular, care încorporate expresii regulate în anii 1960. 81 00:06:14,160 --> 00:06:20,560 În anii '80, Perl a fost construit - este un limbaj de programare care 82 00:06:20,560 --> 00:06:24,110 încorporează expresii regulate foarte proeminent. 83 00:06:24,550 --> 00:06:30,130 Și apoi, mai recent, am avut Perl expresii regulate compatibil 84 00:06:30,130 --> 00:06:35,870 protocoale de fapt în alte limbi care utilizează o mare parte din aceeași sintaxă. 85 00:06:36,630 --> 00:06:39,840 Desigur, cel mai important eveniment a fost, în 2008, 86 00:06:39,840 --> 00:06:43,040 unde a fost primul national reglementar Ziua expresii, 87 00:06:43,040 --> 00:06:47,350 care cred că este 01 iunie, dacă doriți să sărbătorim. 88 00:06:48,430 --> 00:06:50,840 >> Din nou, doar un pic mai mult teorie aici. 89 00:06:52,180 --> 00:06:55,320 Deci, există câteva moduri diferite de a construi expresii regulate. 90 00:06:55,950 --> 00:07:02,050 Un mod simplu este de a construi expresia pe care aveți de gând să 91 00:07:02,050 --> 00:07:07,500 rula pe șirul de interpretare - de fapt construi un mini-program de mic, care 92 00:07:07,500 --> 00:07:11,870 va analiza bucăți de sfoară și vezi, "Oh, se potrivește acest lucru expresia regulată sau nu?" 93 00:07:12,250 --> 00:07:14,250 Și apoi executați ca. 94 00:07:14,250 --> 00:07:17,300 Deci, dacă aveți un foarte mic expresie regulată, acest lucru este, probabil, 95 00:07:17,300 --> 00:07:19,380 cel mai eficient mod de a face acest lucru. 96 00:07:20,090 --> 00:07:25,420 Și apoi, dacă - O altă opțiune este de a păstra reconstituirea 97 00:07:25,420 --> 00:07:30,260 expresie ca te duci, și că este posibilitatea de simula. 98 00:07:30,440 --> 00:07:37,690 Și aceste încercări timpurii de algoritmi de expresie regulata au fost 99 00:07:37,690 --> 00:07:44,330 relativ simplă și relativ rapidă, dar nu au o mulțime de flexibilitate. 100 00:07:44,330 --> 00:07:47,500 Deci, pentru a face chiar și o parte din lucrurile pe care le vom uita la 101 00:07:47,500 --> 00:07:52,860 astăzi am avut de a face expresii regulate mai complexe 102 00:07:52,860 --> 00:07:56,650 implementari care sunt potențial mult mai lent, astfel că este ceva să aibă în vedere 103 00:07:57,510 --> 00:08:02,920 Există, de asemenea, un expresii negare regulat de soi atac 104 00:08:02,920 --> 00:08:08,330 care a exploata potențialul acestor implementari noi de 105 00:08:08,330 --> 00:08:10,930 expresii regulate a devenit foarte complex. 106 00:08:11,570 --> 00:08:15,650 Și în același sens pe care am văzut-o în atacuri buffer overflow, 107 00:08:15,650 --> 00:08:21,610 aveți atacuri că munca de a face buclele recursive care 108 00:08:21,610 --> 00:08:24,400 depășire a capacității de memorie. 109 00:08:24,780 --> 00:08:29,540 Și de modul în care Regexen este una dintre cele mai plural oficiale de expresie regulată 110 00:08:29,540 --> 00:08:32,890 prin analogie cu boi în cel anglo-saxon. 111 00:08:33,500 --> 00:08:40,169 >> Ok, deci Biblioteca Python mulți dintre voi aici, în persoană au Mac-uri, 112 00:08:40,169 --> 00:08:43,860 astfel încât să puteți trage de fapt asta pe ecran. 113 00:08:43,860 --> 00:08:47,480 Expresiile regulate sunt construite în Python. 114 00:08:48,070 --> 00:08:53,020 Și astfel Python este preîncărcat pe Mac-uri și, de asemenea, disponibil online la acest link. 115 00:08:53,770 --> 00:08:57,350 Deci, dacă vă uitați puteți să întrerupeți și asigurați-vă că aveți Python 116 00:08:58,080 --> 00:09:00,170 ca vom juca aici. 117 00:09:00,780 --> 00:09:06,420 Există un manual on-line, așa că, dacă tastați doar Python în computer 118 00:09:06,420 --> 00:09:10,500 veți vedea că versiunea vine în terminal. 119 00:09:11,070 --> 00:09:17,720 Așa că am oferit un link la manualul pentru versiunea 2 a Python, precum și o foaie de ieftin. 120 00:09:17,720 --> 00:09:23,100 Există o versiune 3 de Python, dar Mac-ul nu neapărat 121 00:09:23,100 --> 00:09:25,130 vin cu care preîncărcat. 122 00:09:25,130 --> 00:09:27,360 Deci, nu foarte diferit. 123 00:09:27,360 --> 00:09:33,270 Ok, deci unele elementele de bază ale folosind expresii regulate în Python. 124 00:09:34,080 --> 00:09:42,650 >> Deci, aici am folosit o expresie foarte simplu, așa că am făcut Python re import 125 00:09:43,750 --> 00:09:47,070 și apoi a luat rezultatul re.search. 126 00:09:47,070 --> 00:09:49,910 Și de căutare are 2 argumente. 127 00:09:49,910 --> 00:09:56,040 Primul este expresie regulată, iar al doilea este textul 128 00:09:56,040 --> 00:09:58,290 sau șir doriți să le analizați. 129 00:09:58,290 --> 00:10:01,210 Și apoi am imprimat result.group. 130 00:10:01,580 --> 00:10:05,860 Deci, acestea sunt cele două funcții de bază, pe care le vom vedea astăzi 131 00:10:06,790 --> 00:10:10,170 în procesul de învățare despre expresii regulate. 132 00:10:10,170 --> 00:10:12,880 Deci, doar de rupere jos această expresie regulată aici 133 00:10:12,880 --> 00:10:21,770 h și apoi \ w și apoi m astfel \ w accepta orice fel de caracter alfabetic acolo. 134 00:10:21,850 --> 00:10:26,820 Deci, aici suntem în căutarea pentru un "h" și apoi un alt caracter alfabetic 135 00:10:26,820 --> 00:10:30,060 și apoi m, asa ca aici care să se potrivească Ham 136 00:10:30,060 --> 00:10:34,480 în, "Abraham Lincoln și șuncă sandwich-uri." 137 00:10:35,040 --> 00:10:37,150 Acesta este rezultatul acestui grup. 138 00:10:37,680 --> 00:10:43,130 Un alt lucru pe care îl putem face este folosi șiruri noastre înaintea textului în Python. 139 00:10:43,130 --> 00:10:46,220 Deci cred ca voi merge mai departe și trage asta aici. 140 00:10:46,220 --> 00:10:49,210 Python re import. 141 00:10:50,070 --> 00:10:54,000 Și dacă ar fi să fac același lucru - să zicem Textul este, 142 00:10:55,390 --> 00:11:00,800 "Avraam," să ne mări - acolo mergem. 143 00:11:01,610 --> 00:11:06,430 Textul este, "Avraam mănâncă șuncă." 144 00:11:07,460 --> 00:11:15,260 Bine, și apoi conduce = re.search. 145 00:11:16,260 --> 00:11:22,020 Și apoi expresia noastră poate fi h, iar apoi voi face dot m. 146 00:11:22,020 --> 00:11:26,280 Deci, punct nevoie doar de orice caracter care nu este o linie nouă, inclusiv numere, 147 00:11:26,280 --> 00:11:28,650 semne procentuale, ceva de genul asta. 148 00:11:28,650 --> 00:11:38,030 Și apoi Text - boom-ul - și apoi result.group--da. 149 00:11:38,030 --> 00:11:41,820 Astfel că este doar modul de a implementa funcționalitatea de bază aici. 150 00:11:42,300 --> 00:11:55,110 Dacă am avut un inel de text care - ca textul nebun - inclus spune o mulțime de bare înapoi 151 00:11:55,110 --> 00:12:01,180 și siruri de caractere în interiorul și lucruri care ar putea arata ca secvențe escape, 152 00:12:01,180 --> 00:12:08,480 atunci probabil că doriți să utilizați de introducere a textului prime pentru a vă asigura că este acceptat. 153 00:12:08,480 --> 00:12:14,120 Și asta doar arata asa. 154 00:12:14,120 --> 00:12:17,810 Deci, dacă am fost în căutarea pentru fiecare dintre ei acolo nu ar trebui să găsim nimic. 155 00:12:19,070 --> 00:12:21,680 Dar care este modul în care v-ar pune în aplicare, chiar înainte de șir de 156 00:12:21,680 --> 00:12:24,990 expresie regulată vă pune litera R. 157 00:12:26,150 --> 00:12:30,260 >> Ok, deci hai să ne continuăm. 158 00:12:30,260 --> 00:12:33,730 Bine - deci să ne uităm la câteva modele repetitive aici. 159 00:12:34,750 --> 00:12:39,150 Deci, un lucru pe care doriți să faceți este să repete lucruri 160 00:12:40,040 --> 00:12:42,480 cum sunteți în căutarea prin text. 161 00:12:42,480 --> 00:12:48,300 Deci, pentru a face un urmat de orice numar de b - faci ab *. 162 00:12:48,630 --> 00:12:51,620 Și apoi există o serie de alte norme prea. 163 00:12:51,620 --> 00:12:54,380 Si poti sa te uiti de toate astea, voi alerga doar prin unele dintre cele 164 00:12:54,380 --> 00:12:57,630 cel mai frecvent utilizate cele. 165 00:12:57,630 --> 00:13:03,920 Deci ab + este o urmată de orice N mai mare decât 0 din b. 166 00:13:04,510 --> 00:13:08,000 AB? este o urmată de 0 sau 1 de b. 167 00:13:09,190 --> 00:13:18,580 ab {N} este o urmată de N al b, și apoi așa mai departe. 168 00:13:18,580 --> 00:13:22,820 Dacă aveți două numere în acolade sunteți specificarea unei game 169 00:13:23,300 --> 00:13:25,440 care pot fi, eventual, potrivite. 170 00:13:26,390 --> 00:13:30,420 Deci, ne vom uita mai mult la o modele repetitive cuplu într-un minut. 171 00:13:31,960 --> 00:13:42,300 Deci, 2 lucruri de a păstra în minte atunci când se utilizează aceste instrumente model de potrivire aici. 172 00:13:42,300 --> 00:13:52,120 Deci, spune că vrea să se uite la HM a, "Abraham Lincoln face sandwich-uri sunca." 173 00:13:52,120 --> 00:13:55,230 Așa că am schimbat numele lui Abraham Lincoln la Avraam. 174 00:13:55,230 --> 00:14:00,290 Și acum suntem în căutarea pentru ceea ce se întoarce de această funcție de căutare, 175 00:14:00,290 --> 00:14:03,270 și returnează doar sunca în acest caz. 176 00:14:03,620 --> 00:14:08,080 Și face asta, deoarece căutarea doar ia în mod natural cea mai mare coadă stânga. 177 00:14:08,080 --> 00:14:12,130 Și toate expresiile regulate dacă nu specificați altfel va face asta. 178 00:14:12,830 --> 00:14:18,880 Dacă ne-am dorit pentru a afla tot ce este o funcție pentru care - găsi tot. 179 00:14:18,880 --> 00:14:35,100 Astfel că ar putea arata la fel ca toate = re.findall ('h.m ", text) 180 00:14:35,100 --> 00:14:44,540 și apoi all.group (). 181 00:14:44,540 --> 00:14:51,040 Toate produce atât sunca si sunca, în acest caz atât de siruri de caractere în Avraam fiecare Ham. 182 00:14:51,610 --> 00:14:55,110 Astfel că este o altă opțiune. 183 00:14:56,250 --> 00:15:06,940 >> Mare. Un alt lucru de a păstra în minte este că expresii regulate ia cea mai mare intuitiv. 184 00:15:06,940 --> 00:15:09,520 Să ne uităm la acest exemplu. 185 00:15:10,200 --> 00:15:16,070 Am făcut-o mai caută la stânga aici, și apoi am încercat o căutare mai mare 186 00:15:16,070 --> 00:15:18,800 folosind operatorul Kleene stele. 187 00:15:18,800 --> 00:15:24,180 Deci, pentru, "Abraham Lincoln face sandwich-uri sunca," și eu doar am întors 188 00:15:24,180 --> 00:15:26,280 m ca rezultat. 189 00:15:26,280 --> 00:15:31,670 Motivul pentru această greșeală a fost că am putut avea orice număr de 190 00:15:31,670 --> 00:15:36,140 h din cauză că nu a specificat nimic pentru a merge în între h și m. 191 00:15:36,140 --> 00:15:42,010 Singurul exemplu acolo care a avut m - singurele exemple acolo cu m în ea 192 00:15:42,010 --> 00:15:46,220 precum și orice număr de lui h au fost doar șirul m. 193 00:15:46,490 --> 00:15:51,850 Apoi am încercat din nou, i-am spus, "Bine, haideți să ne cel mai mare grup real aici." 194 00:15:51,850 --> 00:15:59,670 Și apoi am făcut h.. * M, astfel încât doar întoarce orice număr de caractere între h și m. 195 00:16:00,280 --> 00:16:02,950 Și dacă sunteți doar la început și de gândire, "Oh, da, ei bine acest lucru va 196 00:16:02,950 --> 00:16:11,560 mă șuncă, "este nevoie de fapt, totul, de la h în Abraham Lincoln 197 00:16:11,560 --> 00:16:13,690 tot drumul până la sfârșitul lui Ham. 198 00:16:14,040 --> 00:16:18,110 Acesta este lacom, se vede h - tot acest alt text - m, 199 00:16:18,110 --> 00:16:21,280 și că este ceea ce este nevoie de inch 200 00:16:22,060 --> 00:16:27,480 Aceasta este o deosebit de extraordinar - aceasta este o caracteristică putem, de asemenea, 201 00:16:27,480 --> 00:16:30,670 specificați pentru că nu fi lacom cu alte funcții. 202 00:16:31,480 --> 00:16:34,490 Dar acest lucru este ceva ce trebuie să țină cont mai ales 203 00:16:34,490 --> 00:16:38,720 atunci când se uită la text HTML, care este unul dintre motivele pentru care 204 00:16:38,720 --> 00:16:41,500 expresii regulate sunt dificil pentru HTML. 205 00:16:42,460 --> 00:16:46,310 Pentru că, dacă aveți o etichetă deschisă HTML și apoi o mulțime de lucruri în mijloc 206 00:16:46,310 --> 00:16:49,820 și apoi un alt HTML închis tag-ul mult mai târziu în program, 207 00:16:49,820 --> 00:16:55,420 tocmai ați mâncat o mulțime de cod HTML, eventual, din greșeală. 208 00:16:56,200 --> 00:17:01,840 >> Bine - caractere speciale atât mai mult, la fel ca multe alte limbi, 209 00:17:01,840 --> 00:17:04,780 vom scăpa folosind slash. 210 00:17:04,780 --> 00:17:10,329 Deci, putem folosi punctul de a specifica orice caracter, cu excepția pentru o nouă linie. 211 00:17:10,329 --> 00:17:14,550 Putem folosi evadare w pentru a specifica orice caracter alfabetic. 212 00:17:14,550 --> 00:17:20,329 Și de evacuare d analogie pentru orice întreg - caractere numerice. 213 00:17:20,630 --> 00:17:27,440 Putem specifica - putem folosi paranteze pentru a specifica expresii legate. 214 00:17:27,440 --> 00:17:30,970 Deci, aceasta ar accepta o, b, c sau. 215 00:17:31,320 --> 00:17:37,000 Și, de asemenea, putem specifica sau opțiuni, fie pentru a sau b. 216 00:17:37,000 --> 00:17:41,110 De exemplu - dacă am fost în căutarea pentru mai multe posibilități de 217 00:17:41,110 --> 00:17:44,940 în paranteze putem folosi operatorul sau in - 218 00:17:44,940 --> 00:17:52,480 astfel încât să ne întoarcem la acest exemplu aici. 219 00:17:53,000 --> 00:17:59,790 Și acum să ne ia - să ne întoarcem la acest exemplu aici, și apoi 220 00:17:59,790 --> 00:18:12,290 ia AE - astfel încât aceasta ar trebui să se întoarcă - Cred că acest lucru este încă Avraam. 221 00:18:12,290 --> 00:18:17,410 Deci, acest lucru -, dacă vom face tot - mare. 222 00:18:17,410 --> 00:18:22,700 Așa că haideți să actualizeze textul aici. 223 00:18:22,700 --> 00:18:34,690 "Avraam mănâncă șuncă în timp ce hemming lui -. În timp ce Hemming" Mare. 224 00:18:44,090 --> 00:18:47,330 Toate. Mare. Acum avem sunca, sunca, și tiv. 225 00:18:48,510 --> 00:18:59,370 În timp ce Hemming - în timp ce fredona la el - în timp ce fredona la tiv-l. Mare. 226 00:19:00,350 --> 00:19:03,250 Același lucru. 227 00:19:03,820 --> 00:19:09,180 Acum, totul se întoarce încă doar sunca, sunca, și tiv fără a ridica pe hum sau el. 228 00:19:09,940 --> 00:19:22,600 Mare - Și ce dacă am vrut să se uite la nici că - așa am putea face, de asemenea, 229 00:19:23,510 --> 00:19:33,810 el sau - vom reveni la asta. 230 00:19:34,810 --> 00:19:45,760 Ok - deci - în regulă - în pozițiile puteți utiliza, de asemenea, caret sau semnul dolarului 231 00:19:45,760 --> 00:19:49,350 pentru a specifica faptul că sunteți în căutarea pentru ceva la începutul sau la sfârșitul unui șir. 232 00:19:50,260 --> 00:19:52,260 Sau la începutul sau la sfârșitul unui cuvânt. 233 00:19:52,400 --> 00:19:54,470 Care este o modalitate de a folosi. 234 00:19:55,630 --> 00:20:01,160 >> Ok - deci să ne jucăm cu un bloc puțin mai mare de text. 235 00:20:03,950 --> 00:20:08,310 Să spunem că acest rând aici - această declarație aici. 236 00:20:08,310 --> 00:20:11,360 Puterea de expresie regulată este faptul că acestea pot specifica modelelor 237 00:20:11,360 --> 00:20:13,390 nu doar caractere fix. 238 00:20:14,900 --> 00:20:18,790 Să facem - să ne numim acest bloc. 239 00:20:22,400 --> 00:20:27,110 Apoi, vom citi toate că inch 240 00:20:28,890 --> 00:20:50,820 Și apoi au o - să facem tot =; Deci, ce sunt unele lucruri pe care le-ar putea căuta aici profitabil? 241 00:20:50,820 --> 00:20:54,070 Am putea uita pentru ureche expresie. 242 00:20:55,050 --> 00:21:01,520 Nu este foarte interesant. Ce zici de asta? Vom vedea ce se întâmplă. 243 00:21:03,710 --> 00:21:05,710 I-am dat o problemă. 244 00:21:06,380 --> 00:21:10,750 Deci, orice număr de lucruri înainte de a re și toate. 245 00:21:10,750 --> 00:21:15,630 Așa că ar trebui să se întoarcă totul de la început până la toate re, probabil, de câteva ori. 246 00:21:18,800 --> 00:21:21,970 Și apoi aici, avem puterea de expresii regulate este că ei 247 00:21:21,970 --> 00:21:24,900 pot specifica modele nu doar personaje de aici sunt. 248 00:21:24,900 --> 00:21:28,510 Deci, tot drumul până la re finală, a început cu cea mai din stânga și a fost lacom. 249 00:21:30,710 --> 00:21:32,710 Să vedem - ce altceva am putea cauta. 250 00:21:32,710 --> 00:21:39,860 Cred că un singur lucru dacă ai fi interesat în căutarea pentru pronumele ea și el, 251 00:21:39,860 --> 00:21:44,600 ai putea verifica e fiind egală cu 0 sau 1 252 00:21:44,600 --> 00:21:49,710 și expresia el, și că nu este, probabil, va reveni - 253 00:21:49,710 --> 00:21:58,020 Oh, cred că sa întors pentru că nu ne uitam la putere, în acea zi, aici sunt. 254 00:22:00,590 --> 00:22:06,270 Să încercăm precizând că acest lucru trebuie să vină de la începutul a ceva. 255 00:22:06,640 --> 00:22:09,530 Să vedem dacă scade. 256 00:22:09,530 --> 00:22:19,630 Deci, putem face grăsime, și acolo nu vom primi nimic pentru ea și el 257 00:22:19,630 --> 00:22:22,870 nu apar în această frază. 258 00:22:24,960 --> 00:22:30,410 Mare. Ok - deci înapoi la pisica aici. 259 00:22:30,410 --> 00:22:35,720 Modele atât de complex este doare creierul. 260 00:22:35,720 --> 00:22:40,500 Deci, de aceea vom folosi expresii regulate pentru a evita aceste probleme. 261 00:22:40,820 --> 00:22:43,520 >> Deci, aici sunt alte câteva moduri de utile pe care le puteți juca în jurul cu. 262 00:22:43,520 --> 00:22:50,290 Ne-am uitat la căutare azi, dar se poate folosi, de asemenea meci, Split, findall, și grupuri. 263 00:22:50,290 --> 00:22:53,970 Deci, alte lucruri interesante pe care le puteți face cu expresii regulate în afară de doar 264 00:22:53,970 --> 00:22:58,870 în căutarea de modele este de a lua un model și deține toate meciurile - 265 00:22:58,870 --> 00:23:02,530 variabilele sale - iar mai apoi folosind cele din codul mai târziu. 266 00:23:02,850 --> 00:23:05,980 Care poate fi destul de util. Alte lucruri ar putea fi de numărare. 267 00:23:05,980 --> 00:23:11,720 Deci, putem contoriza numărul de instanțe ale unui model de expresie regulată, 268 00:23:11,720 --> 00:23:13,960 și că este ceea ce putem folosi pentru grupuri. 269 00:23:13,960 --> 00:23:17,550 Și alte moduri, precum și sunt, de asemenea, posibile. 270 00:23:18,040 --> 00:23:22,980 Deci, eu doar vreau să vorbesc un pic mai mult despre alte moduri de a folosi expresii regulate. 271 00:23:22,980 --> 00:23:29,100 >> Deci, o cerere mai avansat este in potrivire neclare. 272 00:23:29,100 --> 00:23:33,450 Deci, dacă sunteți în căutarea pentru un text de exprimare, Iulius Cezar, 273 00:23:33,450 --> 00:23:37,740 și veți vedea fie Gaius Iulius Cezar sau numele de Iulius Cezar în alte limbi, 274 00:23:37,740 --> 00:23:44,400 atunci ați putea dori, de asemenea, să atribuie unele greutate la aceste valori. 275 00:23:44,400 --> 00:23:48,930 Și dacă aceasta este destul de aproape - în cazul în care se trece de un anumit prag - atunci vrei 276 00:23:48,930 --> 00:23:50,860 să fie în măsură să accepte Julius Caesar. 277 00:23:50,860 --> 00:24:00,580 Deci, există câteva implementări diferite, pentru că în câteva alte limbi. 278 00:24:02,580 --> 00:24:08,420 Iată câteva alte instrumente, Regex Pal - o aplicatie la îndemână mic on-line la 279 00:24:08,420 --> 00:24:12,190 verificați dacă expresii regulate sunt compuse corect. 280 00:24:12,190 --> 00:24:18,500 Există, de asemenea, instrumente independente pe care le puteți rula de pe desktop 281 00:24:18,500 --> 00:24:22,100 cum ar fi Ultra Pico, și precum și cărți de bucate doar. 282 00:24:22,100 --> 00:24:25,410 Deci, dacă faci un proiect care implică o tona de expresii regulate 283 00:24:25,410 --> 00:24:29,810 aceasta este, probabil, locul pentru a merge în afara domeniului de aplicare al azi. 284 00:24:31,520 --> 00:24:35,770 Și apoi doar pentru a vă oferi un sentiment de modul în comun este 285 00:24:35,770 --> 00:24:44,090 există grep în Unix, Perl a construit-in, iar C este PCRE pentru C. 286 00:24:44,090 --> 00:24:48,890 Și apoi toate aceste limbi au, de asemenea, pachete regulate de expresie 287 00:24:48,890 --> 00:24:52,020 care operează cu esență, aceeași sintaxă am primit un gust de azi. 288 00:24:52,020 --> 00:24:54,790 PHP, Java, Ruby, și așa mai departe. 289 00:24:56,080 --> 00:24:58,980 >> Google Code Search este de fapt demn de menționat, este unul din 290 00:24:58,980 --> 00:25:05,720 relativ puține aplicații acolo care permite publicului să acceseze 291 00:25:05,720 --> 00:25:07,800 baza sa de date folosind expresii regulate. 292 00:25:07,800 --> 00:25:12,920 Deci, dacă te uiți pe Google Code Search puteți găsi codul de 293 00:25:12,920 --> 00:25:16,880 dacă sunteți în căutarea pentru un exemplu de cum ar putea fi utilizată o funcție, 294 00:25:16,880 --> 00:25:21,610 se poate utiliza o expresie regulată pentru a găsi că funcția de a fi folosite în tot felul de cazuri diferite. 295 00:25:21,610 --> 00:25:28,000 Ai putea uita pentru fwrite, și apoi te puteai uita pentru steagul de scriere sau citire 296 00:25:28,000 --> 00:25:32,000 dacă ai vrut un exemplu de fwrite fi utilizate în acest caz. 297 00:25:33,530 --> 00:25:37,010 Deci, același lucru acolo, și aici sunt câteva referințe. 298 00:25:37,010 --> 00:25:40,990 Acesta va fi disponibil on-line, precum și, deci merge înainte, dacă 299 00:25:40,990 --> 00:25:45,560 vrei să te uiți la Python, grep, Perl - vrei doar pentru a obține unele inspirație 300 00:25:45,560 --> 00:25:50,650 sau, dacă vrei să te uiți mai mult la teoria aici sunt câteva sărituri în afara terenului locuri. 301 00:25:50,650 --> 00:25:53,870 Mulțumesc mult. 302 00:25:58,470 --> 00:25:59,910 [CS50.TV]