1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Seminár: Pattern Matching pomocou regulárnych výrazov] 2 00:00:02,000 --> 00:00:04,000 [John Mussman-Harvard University] 3 00:00:04,000 --> 00:00:07,220 [Toto je CS50.-CS50.TV] 4 00:00:07,780 --> 00:00:11,610 Dobre. No, vitajte všetci. To je CS50 2012. 5 00:00:11,780 --> 00:00:16,610 Volám sa John, a ja budem hovoriť dnes o regulárnych výrazoch. 6 00:00:16,610 --> 00:00:22,530 Regulárne výrazy je predovšetkým nástroj, ale tiež sa niekedy používa 7 00:00:22,530 --> 00:00:28,650 v kóde aktívne v podstate zodpovedali vzory a reťazca. 8 00:00:28,650 --> 00:00:33,800 Tak tu je to webový komiks od xkcd. 9 00:00:34,440 --> 00:00:42,370 V tomto komikse je záhadné vraždy, kedy vrah má 10 00:00:42,370 --> 00:00:47,860 nasledovala niekoho na dovolenku, a protagonisti musia 11 00:00:47,860 --> 00:00:52,500 prehľadávať 200MB e-mailov, ktorí hľadajú adresu. 12 00:00:52,500 --> 00:00:56,090 A oni sa chystajú vzdať, keď niekto, kto vie, regulárne výrazy - 13 00:00:56,090 --> 00:01:00,550 pravdepodobne superhrdina - znášanie dole a píše nejaký kód 14 00:01:00,550 --> 00:01:02,970 a rieši záhadnú vraždu. 15 00:01:02,970 --> 00:01:07,370 Takže zrejme to bude niečo, čo bude mať právomoc robiť 16 00:01:07,370 --> 00:01:09,370 Po tomto seminári. 17 00:01:09,370 --> 00:01:12,250 My sa práve chystá poskytnúť stručný úvod do jazyka 18 00:01:12,250 --> 00:01:16,770 a dá vám dostatok prostriedky ísť po viac prostriedkov na vlastnú päsť. 19 00:01:17,680 --> 00:01:21,700 >> Takže regulárne výrazy vyzerajú v podstate takhle. 20 00:01:22,930 --> 00:01:25,550 To je regulárny výraz v Ruby. 21 00:01:25,550 --> 00:01:29,280 To nie je príliš odlišný v rôznych jazykoch. 22 00:01:29,690 --> 00:01:37,630 Máme len na lomítka začať a označte regulárny výraz v Ruby. 23 00:01:37,630 --> 00:01:42,880 A to je regulárny výraz hľadať v e-mailovej adresy vzoru. 24 00:01:42,880 --> 00:01:49,160 Vidíme teda, na prvom bitom hľadá alfanumerické znaky. 25 00:01:50,500 --> 00:01:54,880 To je preto, že e-mailovej adresy sa často musí začínať abecedným znakom. 26 00:01:55,460 --> 00:01:59,330 A potom nejaký zvláštny znak nasledovaný symbolom @. 27 00:01:59,330 --> 00:02:03,260 A potom to isté pre názov domény. 28 00:02:03,260 --> 00:02:10,030 A potom medzi 2 a 4 znaky hľadať. Com,. Net, a tak ďalej. 29 00:02:10,850 --> 00:02:13,200 Tak, že je ďalší príklad regulárneho výrazu. 30 00:02:13,200 --> 00:02:17,270 Takže regulárne výrazy sú protokoly pre zistenie dekory v texte. 31 00:02:17,270 --> 00:02:21,130 Robia porovnanie, výber a nahradenie. 32 00:02:21,690 --> 00:02:27,970 Takže Tretí príklad je nájsť všetky telefónne čísla končiace na 54 v adresári. 33 00:02:27,970 --> 00:02:34,360 Takže ako potrhaný Dávida až na CS50 adresári môžeme hľadať 34 00:02:34,360 --> 00:02:40,450 vzor, ​​kde máme zátvorky potom 3 čísla a potom je koniec zátvorky, 35 00:02:40,450 --> 00:02:44,070 3 ďalšie čísla, pomlčka, dve čísla, a potom 54. 36 00:02:44,070 --> 00:02:48,310 A to by v podstate, ako prísť s regulárny výraz pre hľadanie za to. 37 00:02:49,150 --> 00:02:52,960 >> Takže tam sú - sme urobili niektoré veci CS50 ktoré sú trochu ako 38 00:02:52,960 --> 00:02:59,740 regulárne výrazy, takže - napríklad - v dictionary.C súbore 39 00:02:59,740 --> 00:03:04,720 pre problémové preklepov súbor, ktorý môže byť použitý fscanf 40 00:03:04,720 --> 00:03:07,930 čítať slovom zo slovníka. 41 00:03:07,930 --> 00:03:16,240 A vidíte, percento 45s hľadá reťazec 45 znakov. 42 00:03:16,240 --> 00:03:20,020 Tak to je niečo ako rudimentárne regulárneho výrazu. 43 00:03:21,150 --> 00:03:26,060 A môžete mať nejaké 45 znakmi, ktoré pristanú tam 44 00:03:26,060 --> 00:03:28,080 a vybrať tie hore. 45 00:03:28,080 --> 00:03:33,480 A potom druhý príklad v poslednom probléme programovanie pre web 46 00:03:33,480 --> 00:03:40,760 nastaviť v distro kódu pre PHP sme vlastne majú jednoduchý regulárny výraz. 47 00:03:40,760 --> 00:03:46,790 A toto je jednoducho chcú skontrolovať, či je webová stránka, ktorá je odovzdaný 48 00:03:46,790 --> 00:03:51,940 zodpovedá buď prihláste sa alebo sa zaregistrujte odhlásenia. PHP. 49 00:03:52,220 --> 00:03:57,910 A potom sa vracať true alebo false na základe tohto porovnávania regulárneho výrazu. 50 00:03:59,400 --> 00:04:01,740 >> Takže keď používate regulárny výraz? 51 00:04:01,740 --> 00:04:04,820 Prečo ste tu dnes? 52 00:04:05,330 --> 00:04:08,480 Takže nechcete použiť regulárny výraz, keď je tu niečo, čo 53 00:04:08,480 --> 00:04:11,640 robí prácu za vás ešte ľahšie. 54 00:04:11,640 --> 00:04:15,510 Takže XML a HTML sú vlastne celkom zložité 55 00:04:15,510 --> 00:04:18,480 napísať regulárne výrazy pre ako uvidíme za chvíľu. 56 00:04:19,110 --> 00:04:23,280 Takže tam sú vyhradené pre analyzátory týchto jazykov. 57 00:04:24,170 --> 00:04:30,060 Tiež je potrebné byť v poriadku s kompromismi a presnosť často. 58 00:04:30,060 --> 00:04:36,220 Ak ste sa snaží - a tak sme videli regulárny výraz na e-mailovú adresu, 59 00:04:37,370 --> 00:04:42,590 ale že ste chcel konkrétnu e-mailovú adresu a postupne 60 00:04:42,590 --> 00:04:48,570 regulárny výraz môže byť zložitejšie, pretože to sa stalo presnejšie. 61 00:04:49,580 --> 00:04:52,260 Tak, že by bol jeden kompromis. 62 00:04:52,260 --> 00:04:55,330 Môžete si byť istí, že ste v poriadku, aby sa regulárny výraz. 63 00:04:55,330 --> 00:04:57,920 Ak presne viete, čo hľadáte, by to mohlo dávať väčší zmysel 64 00:04:57,920 --> 00:05:02,070 aby v čase a napísať efektívnejšie analyzátor. 65 00:05:02,070 --> 00:05:06,980 A konečne je tu historický problém s pravidelnosťou 66 00:05:06,980 --> 00:05:08,940 výrazov a jazykov. 67 00:05:08,940 --> 00:05:12,960 Regulárne výrazy sú v skutočnosti oveľa silnejšie ako 68 00:05:12,960 --> 00:05:16,450 regulárne výrazy na povedzme vo formálnom zmysle. 69 00:05:17,130 --> 00:05:20,150 >> Takže nechcem ísť príliš ďaleko do formálnej teóriu, 70 00:05:20,150 --> 00:05:24,000 ale väčšina jazykov, ktoré máme kód v skutočnosti nie sú pravidelné. 71 00:05:24,000 --> 00:05:29,110 A to je dôvod, prečo sa niekedy regulárne výrazy nie sú považované za všetko, čo v bezpečí. 72 00:05:29,670 --> 00:05:33,150 Takže v podstate je Chomského hierarchia jazykov pre jazyky, 73 00:05:33,150 --> 00:05:38,400 a regulárne výrazy sú budované s použitím spojenia, zreťazenie, 74 00:05:38,400 --> 00:05:41,810 a Kleene hviezda operáciu, uvidíme za pár minút. 75 00:05:43,130 --> 00:05:48,860 Pokiaľ máte záujem o teoreticky tam je celkom veľa to tam deje pod kapotou. 76 00:05:50,360 --> 00:05:55,880 >> Tak krátkou históriou - len pre kontext tu - pravidelné sady prišiel 77 00:05:55,880 --> 00:05:59,580 v roku 1950, a potom sme mali jednoduché editory, ktoré 78 00:05:59,580 --> 00:06:03,300 začlenené regulárne výrazy - len vyhľadávanie reťazca. 79 00:06:03,570 --> 00:06:09,110 Grep - čo je nástroj pre príkazový riadok - bol jedným z prvých, 80 00:06:09,110 --> 00:06:14,160 veľmi populárne nástroje, ktoré regulárne výrazy obsiahnuté v roku 1960. 81 00:06:14,160 --> 00:06:20,560 V 80. rokoch bola postavená Perl - je programovací jazyk, ktorý 82 00:06:20,560 --> 00:06:24,110 obsahuje regulárne výrazy veľmi nápadne. 83 00:06:24,550 --> 00:06:30,130 A potom sa v poslednej dobe sme mali Perl kompatibilný regulárny výraz 84 00:06:30,130 --> 00:06:35,870 protokoly v podstate v iných jazykoch, ktoré používajú veľa z rovnakého syntaxe. 85 00:06:36,630 --> 00:06:39,840 Samozrejme, že bol najdôležitejšou udalosťou v roku 2008 86 00:06:39,840 --> 00:06:43,040 kde bol prvý národný Regulárne výrazy deň, 87 00:06:43,040 --> 00:06:47,350 ktoré podľa môjho názoru je jún 1 ak chcete osláviť. 88 00:06:48,430 --> 00:06:50,840 >> Opäť platí, že len trochu viac teórie tu. 89 00:06:52,180 --> 00:06:55,320 Takže existuje niekoľko rôznych spôsobov, ako budovať regulárne výrazy. 90 00:06:55,950 --> 00:07:02,050 Jeden jednoduchý spôsob je vytvoriť výraz, ktorý hodláte 91 00:07:02,050 --> 00:07:07,500 beží na povrázku interpretovať - ​​v podstate postaviť malý mini-program, ktorý 92 00:07:07,500 --> 00:07:11,870 bude analyzovať kúsky špagátu a uvidíme, "Oh, to hodí regulárny výraz, alebo nie?" 93 00:07:12,250 --> 00:07:14,250 A potom spustiť to. 94 00:07:14,250 --> 00:07:17,300 Takže ak máte veľmi malé regulárny výraz, je to pravdepodobne 95 00:07:17,300 --> 00:07:19,380 najúčinnejší spôsob, ako to urobiť. 96 00:07:20,090 --> 00:07:25,420 A potom, ak vás - ďalšou možnosťou je, aby rekonštrukcia 97 00:07:25,420 --> 00:07:30,260 Výraz as you go, a to je možnosť simulovať. 98 00:07:30,440 --> 00:07:37,690 A tieto prvé pokusy u regulárnych výrazov algoritmy boli 99 00:07:37,690 --> 00:07:44,330 pomerne jednoduché a relatívne rýchlo, ale nemal veľkú flexibilitu. 100 00:07:44,330 --> 00:07:47,500 Takže urobiť ešte niektoré veci, ktoré sa budeme pozerať na 101 00:07:47,500 --> 00:07:52,860 dnes sme museli urobiť zložitejšie regulárny výraz 102 00:07:52,860 --> 00:07:56,650 implementácie, ktoré sú potenciálne oveľa pomalšie, tak to je niečo, čo je potrebné mať na pamäti, 103 00:07:57,510 --> 00:08:02,920 K dispozícii je tiež pravidelné výrazy popieranie útoku odrody 104 00:08:02,920 --> 00:08:08,330 že využitie potenciálu týchto nových implementácií 105 00:08:08,330 --> 00:08:10,930 regulárne výrazy, aby sa stal veľmi zložité. 106 00:08:11,570 --> 00:08:15,650 A v podstate v rovnakom zmysle, ako sme videli v útoky buffer overflow, 107 00:08:15,650 --> 00:08:21,610 Máte útoky, ktoré pracujú tým, že núti rekurzívne slučky 108 00:08:21,610 --> 00:08:24,400 prekročení kapacity pamäte. 109 00:08:24,780 --> 00:08:29,540 A mimochodom Regexen je jedným z oficiálnych plurals regulárneho výrazu 110 00:08:29,540 --> 00:08:32,890 obdobne na voly v anglosaskom. 111 00:08:33,500 --> 00:08:40,169 >> Dobre, tak Python Library mnohí z vás osobne sa Macu, 112 00:08:40,169 --> 00:08:43,860 takže sa môžete skutočne vytiahnuť to na obrazovke. 113 00:08:43,860 --> 00:08:47,480 Regulárne výrazy sú zabudované do Pythone. 114 00:08:48,070 --> 00:08:53,020 A tak Python je predinštalovaný na počítači Mac, a tiež k dispozícii online na tomto odkaze. 115 00:08:53,770 --> 00:08:57,350 Takže ak sa pozeráte môžete pozastaviť a uistite sa, že máte Python 116 00:08:58,080 --> 00:09:00,170 ako hráme tu. 117 00:09:00,780 --> 00:09:06,420 K dispozícii je manuálny online, takže ak ste len písať Python do počítača 118 00:09:06,420 --> 00:09:10,500 uvidíte, že verzia prichádza do terminálu. 119 00:09:11,070 --> 00:09:17,720 Tak som poskytol odkaz manuálu pre verziu 2 Pythone, rovnako ako ťahák. 120 00:09:17,720 --> 00:09:23,100 K dispozícii je verzia 3 Pythone, ale váš Mac, nemusí nutne 121 00:09:23,100 --> 00:09:25,130 prišiel s tým vopred. 122 00:09:25,130 --> 00:09:27,360 Takže nie je príliš odlišný. 123 00:09:27,360 --> 00:09:33,270 Dobre, takže niektoré základy pomocou regulárnych výrazov v Pythone. 124 00:09:34,080 --> 00:09:42,650 >> Tak tu som použil veľmi jednoduchý výraz, tak som to urobil Python import re 125 00:09:43,750 --> 00:09:47,070 a potom sa výsledok re.search. 126 00:09:47,070 --> 00:09:49,910 A hľadanie trvá 2 argumenty. 127 00:09:49,910 --> 00:09:56,040 Prvým z nich je regulárny výraz, a druhý je text 128 00:09:56,040 --> 00:09:58,290 alebo reťazec, ktorý chcete analyzovať. 129 00:09:58,290 --> 00:10:01,210 A potom som vytlačiť na result.group. 130 00:10:01,580 --> 00:10:05,860 Takže to sú dve základné funkcie, ktoré budeme dnes vidieť 131 00:10:06,790 --> 00:10:10,170 dozvedieť sa o regulárnych výrazoch. 132 00:10:10,170 --> 00:10:12,880 Takže len poškodí tento regulárny výraz tu 133 00:10:12,880 --> 00:10:21,770 h a potom \ w a potom som tak \ w práve prijíma akúkoľvek abecedný znak tam. 134 00:10:21,850 --> 00:10:26,820 Tak tu sme hľadali "h" a potom ďalšie abecedný znak, 135 00:10:26,820 --> 00:10:30,060 a potom kláves m, takže tu by zodpovedalo šunka 136 00:10:30,060 --> 00:10:34,480 v ", Abraham Lincoln a šunka sendviče." 137 00:10:35,040 --> 00:10:37,150 Toto je výsledkom tejto skupiny. 138 00:10:37,680 --> 00:10:43,130 Ďalšia vec, ktorú môžeme urobiť, je využiť našich pred textových reťazcov v jazyku Python. 139 00:10:43,130 --> 00:10:46,220 Takže myslím, že budem pokračovať a vytiahnuť, že až tu. 140 00:10:46,220 --> 00:10:49,210 Python import znova. 141 00:10:50,070 --> 00:10:54,000 A ak by som mal urobiť to isté - povedzme text, 142 00:10:55,390 --> 00:11:00,800 "Abrahám," poďme priblížiť - ideme na to. 143 00:11:01,610 --> 00:11:06,430 Text znie: "Abrahám jej šunku." 144 00:11:07,460 --> 00:11:15,260 Dobre, a potom výsledok = re.search. 145 00:11:16,260 --> 00:11:22,020 A potom naše Výraz môže byť h, a potom to urobím dot m 146 00:11:22,020 --> 00:11:26,280 Takže bodka jednoducho trvá ľubovoľný znak, ktorý nie je nový riadok vrátane čísel, 147 00:11:26,280 --> 00:11:28,650 percentuálnych znaky, niečo podobné. 148 00:11:28,650 --> 00:11:38,030 A potom texte - boom - a potom result.group--jo. 149 00:11:38,030 --> 00:11:41,820 Tak, že je to, ako realizovať základné funkcie tu. 150 00:11:42,300 --> 00:11:55,110 Ak by sme mali textovú prsteň, ktorý - ten bláznivý texte - vrátane povedať veľa spätných lomítok 151 00:11:55,110 --> 00:12:01,180 a reťazca vnútri a veci, ktoré by mohol vyzerať escape sekvencií, 152 00:12:01,180 --> 00:12:08,480 potom sa pravdepodobne budete chcieť používať surové zadávanie textu, aby sa ubezpečil, že je prijatý. 153 00:12:08,480 --> 00:12:14,120 A to len vyzerá takto. 154 00:12:14,120 --> 00:12:17,810 Takže ak sme hľadali každý z nich tam by sme nemali nič nájsť. 155 00:12:19,070 --> 00:12:21,680 Ale to je, ako by ste ich vykonávať, tesne pred reťazec 156 00:12:21,680 --> 00:12:24,990 regulárny výraz vložíte písmeno R. 157 00:12:26,150 --> 00:12:30,260 >> Dobre, tak poďme ďalej. 158 00:12:30,260 --> 00:12:33,730 Dobre - takže poďme sa pozrieť na niekoľko opakujúcich sa vzorcov tu. 159 00:12:34,750 --> 00:12:39,150 Takže jedna vec, ktorú chcete urobiť, je opakovať veci 160 00:12:40,040 --> 00:12:42,480 ako ste prehľadávanie textu. 161 00:12:42,480 --> 00:12:48,300 Takže to nasledovaným ľubovoľným počtom b - ty ab *. 162 00:12:48,630 --> 00:12:51,620 A potom existuje rad ďalších pravidiel taky. 163 00:12:51,620 --> 00:12:54,380 A môžete sa pozrieť vo všetkých týchto hore, budem len spustiť cez niektoré 164 00:12:54,380 --> 00:12:57,630 Najčastejšie používaným ty. 165 00:12:57,630 --> 00:13:03,920 Takže ab + je nasledované ľubovoľnú N väčšie ako 0 z b 166 00:13:04,510 --> 00:13:08,000 ab? je nasleduje 0 alebo 1 v B. 167 00:13:09,190 --> 00:13:18,580 ab {N} je nasledovaný N b, a tak ďalej. 168 00:13:18,580 --> 00:13:22,820 Ak máte dve čísla v zložených zátvorkách ste zadali rozsah 169 00:13:23,300 --> 00:13:25,440 ktorý môže podľa potreby prispôsobiť. 170 00:13:26,390 --> 00:13:30,420 Takže sa pozrieme viac na niekoľko opakujúcich sa vzorcov za minútu. 171 00:13:31,960 --> 00:13:42,300 Takže dve veci mať na pamäti pri použití týchto nástrojov pre porovnávanie vzoriek tu. 172 00:13:42,300 --> 00:13:52,120 Takže povedať, chceme sa pozrieť na HM na "Abraham Lincoln je šunkové sendviče." 173 00:13:52,120 --> 00:13:55,230 Tak som zmenil Abraham Lincoln meno Abrahámovi. 174 00:13:55,230 --> 00:14:00,290 A teraz hľadáme to, čo je vrátená touto funkciou vyhľadávania, 175 00:14:00,290 --> 00:14:03,270 a to len vráti šunka v tomto prípade. 176 00:14:03,620 --> 00:14:08,080 A to preto, že hľadanie práve prirodzene má úplne vľavo fronty. 177 00:14:08,080 --> 00:14:12,130 A všetky regulárne výrazy ak neurčíte inak to urobí. 178 00:14:12,830 --> 00:14:18,880 Ak by sme chceli nájsť všetko, čo je funkcia, ktorá - nájsť všetky. 179 00:14:18,880 --> 00:14:35,100 Takže mohol vyzerať all = re.findall ("h.m", text) 180 00:14:35,100 --> 00:14:44,540 a potom all.group (). 181 00:14:44,540 --> 00:14:51,040 Všetky produkuje aj šunka a šunka, v tomto prípade oboch reťazcov v Abrahámovi každej šunky. 182 00:14:51,610 --> 00:14:55,110 Takže to je ďalšia možnosť. 183 00:14:56,250 --> 00:15:06,940 >> Skvelé. Ďalšia vec, ktorú by ste mali mať na pamäti, že regulárne výrazy sa najväčšie intuitívne. 184 00:15:06,940 --> 00:15:09,520 Pozrime sa na tento príklad. 185 00:15:10,200 --> 00:15:16,070 Urobili sme to úplne vľavo hľadať tu, a potom som sa pokúsil o väčšie hľadanie 186 00:15:16,070 --> 00:15:18,800 pomocou Kleene hviezda operátora. 187 00:15:18,800 --> 00:15:24,180 Takže, "Abraham Lincoln robí šunka sendviče," a mám len zadnú 188 00:15:24,180 --> 00:15:26,280 m ako výsledok. 189 00:15:26,280 --> 00:15:31,670 Dôvodom pre túto chybu, že som mohol vziať ľubovoľný počet 190 00:15:31,670 --> 00:15:36,140 h je to preto, že som neuviedol nič, čo by ísť medzi h a m 191 00:15:36,140 --> 00:15:42,010 Jediným príkladom je, že keby m - len príklady, tam sa v nej m 192 00:15:42,010 --> 00:15:46,220 a ľubovoľný počet H je boli len reťazec metrov. 193 00:15:46,490 --> 00:15:51,850 Potom som to skúsil znova, povedal som: "Dobre, poďme si aktuálne najväčšiu skupinu." 194 00:15:51,850 --> 00:15:59,670 A potom som h. * M, tak aby práve vracia ľubovoľný počet znakov medzi h a m 195 00:16:00,280 --> 00:16:02,950 A ak ste práve začínate a myslí si: "Oh, bude v poriadku, dobre to 196 00:16:02,950 --> 00:16:11,560 mi šunku, "je to vlastne vezme všetko od h do Abrahama Lincolna 197 00:16:11,560 --> 00:16:13,690 celú cestu až do konca šunky. 198 00:16:14,040 --> 00:16:18,110 Je to chamtivý, to vidí h - to všetko iný text - m, 199 00:16:18,110 --> 00:16:21,280 a to je to, čo je potreba dovnútra 200 00:16:22,060 --> 00:16:27,480 Toto je obzvlášť pozoruhodné - to je vlastnosť, môžeme tiež 201 00:16:27,480 --> 00:16:30,670 špecifikovať pre to byť chamtivý pomocou iných funkcií. 202 00:16:31,480 --> 00:16:34,490 Ale to je niečo, čo musíme mať na pamäti najmä 203 00:16:34,490 --> 00:16:38,720 pri pohľade na HTML text, ktorý je jedným z dôvodov, ktoré 204 00:16:38,720 --> 00:16:41,500 regulárne výrazy sú ťažké pre HTML. 205 00:16:42,460 --> 00:16:46,310 Pretože ak máte otvorenú HTML tag a potom veľa vecí v stredu 206 00:16:46,310 --> 00:16:49,820 a niektoré ďalšie HTML uzavretý tag oveľa neskôr v programe, 207 00:16:49,820 --> 00:16:55,420 ste práve zjedli veľa kódu HTML možná omylom. 208 00:16:56,200 --> 00:17:01,840 >> V poriadku - takže ďalšie špeciálne znaky, ako mnoho iných jazykov, 209 00:17:01,840 --> 00:17:04,780 utečieme pomocou lomítka. 210 00:17:04,780 --> 00:17:10,329 Takže môžeme použiť bodku zadať ľubovoľný znak okrem nového riadku. 211 00:17:10,329 --> 00:17:14,550 Môžeme použiť únikovú w zadať akýkoľvek abecedný znak. 212 00:17:14,550 --> 00:17:20,329 A obdobne escape d pre nejaké celé číslo - číselné charakter. 213 00:17:20,630 --> 00:17:27,440 Môžeme určiť - môžeme použiť zátvorky pre určenie súvisiace výrazy. 214 00:17:27,440 --> 00:17:30,970 Takže by to prijať, b alebo c. 215 00:17:31,320 --> 00:17:37,000 A tiež môžeme určiť, alebo pre niektoré z možností A alebo B. 216 00:17:37,000 --> 00:17:41,110 Napríklad - ak by sme hľadali viac možností 217 00:17:41,110 --> 00:17:44,940 v zátvorke môžeme použiť operátor OR ako v - 218 00:17:44,940 --> 00:17:52,480 takže vráťme sa k tomuto príkladu tu. 219 00:17:53,000 --> 00:17:59,790 A teraz poďme - vráťme sa k tomuto príkladu tu, a potom 220 00:17:59,790 --> 00:18:12,290 sa ae - takže by to malo vrátiť - myslím, že je to stále Abrahám. 221 00:18:12,290 --> 00:18:17,410 Takže to - ak budeme robiť všetko - skvelé. 222 00:18:17,410 --> 00:18:22,700 Takže poďme aktualizovať text. 223 00:18:22,700 --> 00:18:34,690 "Abrahám jej šunku, zatiaľ čo jeho lemovanie -. Kým lemovanie" Skvelé. 224 00:18:44,090 --> 00:18:47,330 Všetko. Skvelé. Teraz sme si šunka, šunka, a lem. 225 00:18:48,510 --> 00:18:59,370 Kým lemovanie - pri hučaní mu - keď bzučí na leme neho. Skvelé. 226 00:19:00,350 --> 00:19:03,250 To je to isté. 227 00:19:03,820 --> 00:19:09,180 Teraz všetko vracia stále len šunka, šunka a lem bez vyzdvihnutie na hučanie alebo ním. 228 00:19:09,940 --> 00:19:22,600 Veľký - tak čo keby sme chceli pozrieť na jeden, ktorý - a tak by sme mohli tiež urobiť 229 00:19:23,510 --> 00:19:33,810 ho alebo - Vrátime sa k tomu. 230 00:19:34,810 --> 00:19:45,760 Dobre - tak - v poriadku - na pozíciách, môžete tiež použiť strieška alebo znak dolára 231 00:19:45,760 --> 00:19:49,350 určiť, že hľadáte niečo, čo na začiatku alebo na konci reťazca. 232 00:19:50,260 --> 00:19:52,260 Alebo na začiatku alebo na konci slova. 233 00:19:52,400 --> 00:19:54,470 To je jeden spôsob, ako využiť to. 234 00:19:55,630 --> 00:20:01,160 >> Dobre - tak poďme hrať s mierne väčšou blok textu. 235 00:20:03,950 --> 00:20:08,310 Povedzme, že tento riadok tu - toto vyhlásenie tu. 236 00:20:08,310 --> 00:20:11,360 Sila regulárneho výrazu je to, že môžete zadať vzory 237 00:20:11,360 --> 00:20:13,390 nielen pevné postavy. 238 00:20:14,900 --> 00:20:18,790 Urobme - nazvime tento blok. 239 00:20:22,400 --> 00:20:27,110 Potom budeme čítať všetko palcov 240 00:20:28,890 --> 00:20:50,820 A potom - urobme všetko =, takže aké sú niektoré veci, ktoré môžeme vyhľadávať sem so ziskom? 241 00:20:50,820 --> 00:20:54,070 Mohli by sme hľadať výraz ucha. 242 00:20:55,050 --> 00:21:01,520 Nie moc zaujímavé. Čo vy na to? Uvidíme, čo sa stane. 243 00:21:03,710 --> 00:21:05,710 Dal som to problém. 244 00:21:06,380 --> 00:21:10,750 Takže celá rada vecí, než znova a všetkým. 245 00:21:10,750 --> 00:21:15,630 Tak, že by sa mal vrátiť všetko od začiatku až do všetkých re možná párkrát. 246 00:21:18,800 --> 00:21:21,970 A potom tu máme moc regulárnych výrazov je, že 247 00:21:21,970 --> 00:21:24,900 Môžete zadať vzory nie sú len postavy sú tu. 248 00:21:24,900 --> 00:21:28,510 Takže celú cestu až do konečného re, začalo to najviac vľavo a bol nenásytný. 249 00:21:30,710 --> 00:21:32,710 Pozrime sa - čo iného by sme mohli hľadať. 250 00:21:32,710 --> 00:21:39,860 Myslím, že jedna vec, ak ste boli záujem hľadal zámená ona a on, 251 00:21:39,860 --> 00:21:44,600 môžete skontrolovať s je rovná 0 alebo 1 252 00:21:44,600 --> 00:21:49,710 a výraz mu, a že sa pravdepodobne nebude návratu - 253 00:21:49,710 --> 00:21:58,020 oh, myslím, že to vrátil, pretože tam sme sa pri pohľade na výkon, ten deň, tu sú. 254 00:22:00,590 --> 00:22:06,270 Pokúsme sa upresňuje, že to má prísť na začiatku niečoho. 255 00:22:06,640 --> 00:22:09,530 Uvidíme, či to klesá. 256 00:22:09,530 --> 00:22:19,630 Takže môžeme robiť tuk, a tam sme sa nedostali nič, pretože ona a on 257 00:22:19,630 --> 00:22:22,870 sa nevyskytujú v tejto vete. 258 00:22:24,960 --> 00:22:30,410 Skvelé. Dobre - takže späť ku mačke tu. 259 00:22:30,410 --> 00:22:35,720 Tak zložité vzory poškodzuje mozog. 260 00:22:35,720 --> 00:22:40,500 Takže to je dôvod, prečo používať regulárne výrazy, aby sa zabránilo týmto otázkam. 261 00:22:40,820 --> 00:22:43,520 >> Takže tu sú niektoré ďalšie užitočné režimy, ktoré môžete hrať s okolo. 262 00:22:43,520 --> 00:22:50,290 Pozreli sme sa na hľadanie dnes, ale môžete tiež použiť zápasu, Split, findall a skupiny. 263 00:22:50,290 --> 00:22:53,970 Takže ďalšie super veci, ktoré môžete robiť s regulárnymi výrazmi okrem práve 264 00:22:53,970 --> 00:22:58,870 hľadajú vzory berie vzor a drží všetky zápasy - 265 00:22:58,870 --> 00:23:02,530 jeho premenné - a potom používať tie v kóde neskôr. 266 00:23:02,850 --> 00:23:05,980 To môže byť celkom užitočné. Ostatné veci, by mohlo byť počítanie. 267 00:23:05,980 --> 00:23:11,720 Takže môžeme spočítať počet inštancií regulárneho výrazu, 268 00:23:11,720 --> 00:23:13,960 a to je to, čo sa dá použiť pre skupiny. 269 00:23:13,960 --> 00:23:17,550 A ostatné druhy a sú tiež možné. 270 00:23:18,040 --> 00:23:22,980 Tak som chcel hovoriť trochu viac o iných spôsobov, ako môžete použiť regulárne výrazy. 271 00:23:22,980 --> 00:23:29,100 >> Takže jeden z aplikácií je vo fuzzy zhody. 272 00:23:29,100 --> 00:23:33,450 Takže ak hľadáte nejaký text prejavu, Julius Caesar, 273 00:23:33,450 --> 00:23:37,740 a uvidíte jeden Gaius Julius Caesar alebo názov Julius Caesar v iných jazykoch, 274 00:23:37,740 --> 00:23:44,400 potom budete tiež chcieť priradiť nejakú váhu týchto hodnôt. 275 00:23:44,400 --> 00:23:48,930 A ak je to tak blízko, že - ak to prekročí určitú hranicu - potom chcete 276 00:23:48,930 --> 00:23:50,860 byť schopní prijať Julius Caesar. 277 00:23:50,860 --> 00:24:00,580 Takže existuje niekoľko rôznych implementácia pre to, že v niekoľkých ďalších jazykoch. 278 00:24:02,580 --> 00:24:08,420 Tu sú niektoré ďalšie nástroje, Regex pal - šikovný malý app online 279 00:24:08,420 --> 00:24:12,190 Skontrolujte, či vaše regulárne výrazy sú tvorené správne. 280 00:24:12,190 --> 00:24:18,500 K dispozícii sú aj samostatné nástroje, ktoré môžete spustiť z počítača 281 00:24:18,500 --> 00:24:22,100 ako Ultra Pico, a rovnako ako len kuchárske knihy. 282 00:24:22,100 --> 00:24:25,410 Takže ak robíte projekt, ktorý zahŕňa veľa regulárnych výrazov 283 00:24:25,410 --> 00:24:29,810 to je pravdepodobne miesto, kam ísť mimo rámec dnes. 284 00:24:31,520 --> 00:24:35,770 A potom už len, aby vám pocit, ako je to bežné 285 00:24:35,770 --> 00:24:44,090 je grep v Unixe, Perl má vstavaný a C je PCRE pre C. 286 00:24:44,090 --> 00:24:48,890 A potom to všetko ostatné jazyky majú tiež regulárne výrazy balíčky 287 00:24:48,890 --> 00:24:52,020 ktoré pôsobia podstate s rovnakou syntax sme dostali chuť dnes. 288 00:24:52,020 --> 00:24:54,790 PHP, Java, Ruby, a tak ďalej. 289 00:24:56,080 --> 00:24:58,980 >> Google Code Search je v skutočnosti stojí za zmienku, je to jedna z 290 00:24:58,980 --> 00:25:05,720 pomerne málo aplikácií tam, že umožňuje verejnosti prístup k 291 00:25:05,720 --> 00:25:07,800 jeho databázy pomocou regulárnych výrazov. 292 00:25:07,800 --> 00:25:12,920 Takže keď sa pozriete na Google Code Search nájdete kód 293 00:25:12,920 --> 00:25:16,880 ak hľadáte pre inštanciu, ako by byť funkcia použitá, 294 00:25:16,880 --> 00:25:21,610 môžete použiť regulárny výraz nájsť túto funkciu používaný v najrôznejších rôznych prípadov. 295 00:25:21,610 --> 00:25:28,000 Môžete sa pozrieť na fwrite, a potom by ste sa mohli pozrieť na vlajku čítať alebo písať 296 00:25:28,000 --> 00:25:32,000 ak by ste chceli príklad fwrite použitého v tomto prípade. 297 00:25:33,530 --> 00:25:37,010 Takže to isté tam, a tu sú niektoré odkazy. 298 00:25:37,010 --> 00:25:40,990 To bude k dispozícii on-line, rovnako tak ide dopredu v prípade 299 00:25:40,990 --> 00:25:45,560 Ak chcete sa pozrime na Python, Perl, grep - stačí chcieť získať nejakú inšpiráciu 300 00:25:45,560 --> 00:25:50,650 alebo ak sa chcete pozrieť viac na teórii tu sú niektoré dobré Odrazovým miestach. 301 00:25:50,650 --> 00:25:53,870 Ďakujem mnohokrát. 302 00:25:58,470 --> 00:25:59,910 [CS50.TV]