1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Seminář: Pattern Matching pomocí regulárních výrazů] 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 Dobře. No, vítejte všichni. To je CS50 2012. 5 00:00:11,780 --> 00:00:16,610 Jmenuji se John, a já budu mluvit dnes o regulárních výrazech. 6 00:00:16,610 --> 00:00:22,530 Regulární výrazy je především nástroj, ale také se někdy používá 7 00:00:22,530 --> 00:00:28,650 v kódu aktivně v podstatě odpovídaly vzory a řetězce. 8 00:00:28,650 --> 00:00:33,800 Tak tady je to webový komiks od xkcd. 9 00:00:34,440 --> 00:00:42,370 V tomto komiksu je záhadné vraždy, kdy vrah má 10 00:00:42,370 --> 00:00:47,860 následovala někoho na dovolenou, a protagonisté musí 11 00:00:47,860 --> 00:00:52,500 prohledávat 200MB e-mailů, kteří hledají adresu. 12 00:00:52,500 --> 00:00:56,090 A oni se chystají vzdát, když někdo, kdo ví, regulární výrazy - 13 00:00:56,090 --> 00:01:00,550 pravděpodobně superhrdina - snášení dolů a píše nějaký kód 14 00:01:00,550 --> 00:01:02,970 a řeší záhadnou vraždu. 15 00:01:02,970 --> 00:01:07,370 Takže zřejmě to bude něco, co bude mít pravomoc dělat 16 00:01:07,370 --> 00:01:09,370 Po tomto semináři. 17 00:01:09,370 --> 00:01:12,250 My se právě chystá poskytnout stručný úvod do jazyka 18 00:01:12,250 --> 00:01:16,770 a dá vám dostatek prostředky jít po více prostředků na vlastní pěst. 19 00:01:17,680 --> 00:01:21,700 >> Takže regulární výrazy vypadají v podstatě takhle. 20 00:01:22,930 --> 00:01:25,550 To je regulární výraz v Ruby. 21 00:01:25,550 --> 00:01:29,280 To není příliš odlišný v různých jazycích. 22 00:01:29,690 --> 00:01:37,630 Máme jen na lomítka začít a označte regulární výraz v Ruby. 23 00:01:37,630 --> 00:01:42,880 A to je regulární výraz hledat v e-mailové adresy vzoru. 24 00:01:42,880 --> 00:01:49,160 Vidíme tedy, na prvním bitem hledá alfanumerické znaky. 25 00:01:50,500 --> 00:01:54,880 To je proto, že e-mailové adresy se často musí začínat abecedním znakem. 26 00:01:55,460 --> 00:01:59,330 A pak nějaký zvláštní znak následovaný symbolem @. 27 00:01:59,330 --> 00:02:03,260 A pak to samé pro název domény. 28 00:02:03,260 --> 00:02:10,030 A pak mezi 2 a 4 znaky hledat. Com,. Net, a tak dále. 29 00:02:10,850 --> 00:02:13,200 Tak, že je další příklad regulárního výrazu. 30 00:02:13,200 --> 00:02:17,270 Takže regulární výrazy jsou protokoly pro zjištění dekory v textu. 31 00:02:17,270 --> 00:02:21,130 Dělají porovnání, výběr a nahrazení. 32 00:02:21,690 --> 00:02:27,970 Takže Třetí příklad je najít všechna telefonní čísla končící na 54 v adresáři. 33 00:02:27,970 --> 00:02:34,360 Takže než potrhaný Davida až na CS50 adresáři můžeme hledat 34 00:02:34,360 --> 00:02:40,450 vzor, ​​kde máme závorky pak 3 čísla a pak je konec závorky, 35 00:02:40,450 --> 00:02:44,070 3 další čísla, pomlčka, dvě čísla, a pak 54. 36 00:02:44,070 --> 00:02:48,310 A to by v podstatě, jak přijít s regulární výraz pro hledání za to. 37 00:02:49,150 --> 00:02:52,960 >> Takže tam jsou - jsme udělali některé věci CS50 které jsou trochu jako 38 00:02:52,960 --> 00:02:59,740 regulární výrazy, takže - například - v dictionary.C souboru 39 00:02:59,740 --> 00:03:04,720 pro problémové překlepů soubor, který může být použit fscanf 40 00:03:04,720 --> 00:03:07,930 číst slovem ze slovníku. 41 00:03:07,930 --> 00:03:16,240 A vidíte, procento 45s hledá řetězec 45 znaků. 42 00:03:16,240 --> 00:03:20,020 Tak to je něco jako rudimentární regulárního výrazu. 43 00:03:21,150 --> 00:03:26,060 A můžete mít nějaké 45 znaky, které budou slušet tam 44 00:03:26,060 --> 00:03:28,080 a vybrat ty nahoru. 45 00:03:28,080 --> 00:03:33,480 A pak druhý příklad v posledním problému programování pro web 46 00:03:33,480 --> 00:03:40,760 nastavit v distro kódu pro PHP jsme vlastně mají jednoduchý regulární výraz. 47 00:03:40,760 --> 00:03:46,790 A tohle je prostě chtějí zkontrolovat, zda je webová stránka, která je předán 48 00:03:46,790 --> 00:03:51,940 odpovídá buď přihlašte se nebo se zaregistrujte odhlášení. PHP. 49 00:03:52,220 --> 00:03:57,910 A pak se vracet true nebo false na základě tohoto porovnávání regulárního výrazu. 50 00:03:59,400 --> 00:04:01,740 >> Takže když používáte regulární výraz? 51 00:04:01,740 --> 00:04:04,820 Proč jste tady dnes? 52 00:04:05,330 --> 00:04:08,480 Takže nechcete použít regulární výraz, když je tu něco, co 53 00:04:08,480 --> 00:04:11,640 dělá práci za vás ještě snadněji. 54 00:04:11,640 --> 00:04:15,510 Takže XML a HTML jsou vlastně docela složité 55 00:04:15,510 --> 00:04:18,480 napsat regulární výrazy pro jak uvidíme za chvíli. 56 00:04:19,110 --> 00:04:23,280 Takže tam jsou vyhrazené pro analyzátory těchto jazyků. 57 00:04:24,170 --> 00:04:30,060 Také je potřeba být v pořádku s kompromisy a přesnost často. 58 00:04:30,060 --> 00:04:36,220 Pokud jste se snaží - a tak jsme viděli regulární výraz na e-mailovou adresu, 59 00:04:37,370 --> 00:04:42,590 ale že jste chtěl konkrétní e-mailovou adresu a postupně 60 00:04:42,590 --> 00:04:48,570 regulární výraz může být složitější, protože to se stalo přesnější. 61 00:04:49,580 --> 00:04:52,260 Tak, že by byl jeden kompromis. 62 00:04:52,260 --> 00:04:55,330 Můžete si být jisti, že jste v pořádku, aby se regulární výraz. 63 00:04:55,330 --> 00:04:57,920 Pokud přesně víte, co hledáte, by to mohlo dávat větší smysl 64 00:04:57,920 --> 00:05:02,070 aby v čase a napsat efektivnější analyzátor. 65 00:05:02,070 --> 00:05:06,980 A konečně je zde historický problém s pravidelností 66 00:05:06,980 --> 00:05:08,940 výrazů a jazyků. 67 00:05:08,940 --> 00:05:12,960 Regulární výrazy jsou ve skutečnosti mnohem silnější než 68 00:05:12,960 --> 00:05:16,450 regulární výrazy na řekněme ve formálním smyslu. 69 00:05:17,130 --> 00:05:20,150 >> Takže nechci jít příliš daleko do formální teorii, 70 00:05:20,150 --> 00:05:24,000 ale většina jazyků, které máme kód ve skutečnosti nejsou pravidelné. 71 00:05:24,000 --> 00:05:29,110 A to je důvod, proč se někdy regulární výrazy nejsou považovány za vše, co v bezpečí. 72 00:05:29,670 --> 00:05:33,150 Takže v podstatě je Chomského hierarchie jazyků pro jazyky, 73 00:05:33,150 --> 00:05:38,400 a regulární výrazy jsou budovány s použitím spojení, zřetězení, 74 00:05:38,400 --> 00:05:41,810 a Kleene hvězda operaci, uvidíme za pár minut. 75 00:05:43,130 --> 00:05:48,860 Pokud máte zájem o teoreticky tam je docela hodně to tam děje pod kapotou. 76 00:05:50,360 --> 00:05:55,880 >> Tak krátkou historií - jen pro kontext zde - pravidelné sady přišel 77 00:05:55,880 --> 00:05:59,580 v roce 1950, a pak jsme měli jednoduché editory, které 78 00:05:59,580 --> 00:06:03,300 začleněny regulární výrazy - jen vyhledávání řetězce. 79 00:06:03,570 --> 00:06:09,110 Grep - což je nástroj pro příkazovou řádku - byl jedním z prvních, 80 00:06:09,110 --> 00:06:14,160 velmi populární nástroje, které regulární výrazy obsažené v roce 1960. 81 00:06:14,160 --> 00:06:20,560 V 80. letech byla postavena Perl - je programovací jazyk, který 82 00:06:20,560 --> 00:06:24,110 obsahuje regulární výrazy velmi nápadně. 83 00:06:24,550 --> 00:06:30,130 A pak se v poslední době jsme měli Perl kompatibilní regulární výraz 84 00:06:30,130 --> 00:06:35,870 protokoly v podstatě v jiných jazycích, které používají hodně ze stejné syntaxe. 85 00:06:36,630 --> 00:06:39,840 Samozřejmě, že byl nejdůležitější událostí v roce 2008 86 00:06:39,840 --> 00:06:43,040 kde byl první národní Regulární výrazy den, 87 00:06:43,040 --> 00:06:47,350 které podle mého názoru je červen 1 pokud chcete oslavit. 88 00:06:48,430 --> 00:06:50,840 >> Opět platí, že jen trochu víc teorie zde. 89 00:06:52,180 --> 00:06:55,320 Takže existuje několik různých způsobů, jak budovat regulární výrazy. 90 00:06:55,950 --> 00:07:02,050 Jeden jednoduchý způsob je vytvořit výraz, který hodláte 91 00:07:02,050 --> 00:07:07,500 běží na provázku interpretovat - v podstatě postavit malý mini-program, který 92 00:07:07,500 --> 00:07:11,870 bude analyzovat kousky provázku a uvidíme, "Oh, to hodí regulární výraz, nebo ne?" 93 00:07:12,250 --> 00:07:14,250 A pak spustit to. 94 00:07:14,250 --> 00:07:17,300 Takže pokud máte velmi malé regulární výraz, je to pravděpodobně 95 00:07:17,300 --> 00:07:19,380 nejúčinnější způsob, jak to udělat. 96 00:07:20,090 --> 00:07:25,420 A pak, pokud vás - další možností je, aby rekonstrukce 97 00:07:25,420 --> 00:07:30,260 Výraz as you go, a to je možnost simulovat. 98 00:07:30,440 --> 00:07:37,690 A tyto první pokusy u regulárních výrazů algoritmy byly 99 00:07:37,690 --> 00:07:44,330 poměrně jednoduché a relativně rychle, ale neměl velkou flexibilitu. 100 00:07:44,330 --> 00:07:47,500 Takže udělat ještě některé z věcí, které se budeme dívat na 101 00:07:47,500 --> 00:07:52,860 dnes jsme museli udělat složitější regulární výraz 102 00:07:52,860 --> 00:07:56,650 implementace, které jsou potenciálně mnohem pomaleji, tak to je něco, co je třeba mít na paměti, 103 00:07:57,510 --> 00:08:02,920 K dispozici je také pravidelné výrazy popírání útoku odrůdy 104 00:08:02,920 --> 00:08:08,330 že využití potenciálu těchto nových implementací 105 00:08:08,330 --> 00:08:10,930 regulární výrazy, aby se stal velmi složité. 106 00:08:11,570 --> 00:08:15,650 A v podstatě stejném smyslu, jako jsme viděli v útoků buffer overflow, 107 00:08:15,650 --> 00:08:21,610 Máte útoky, které pracují tím, že nutí rekurzivní smyčky 108 00:08:21,610 --> 00:08:24,400 překročení kapacity paměti. 109 00:08:24,780 --> 00:08:29,540 A mimochodem Regexen je jedním z oficiálních plurals regulárního výrazu 110 00:08:29,540 --> 00:08:32,890 obdobně na voly v anglosaském. 111 00:08:33,500 --> 00:08:40,169 >> Dobře, tak Python Library mnozí z vás osobně se Maců, 112 00:08:40,169 --> 00:08:43,860 takže se můžete skutečně vytáhnout to na obrazovce. 113 00:08:43,860 --> 00:08:47,480 Regulární výrazy jsou zabudovány do Pythonu. 114 00:08:48,070 --> 00:08:53,020 A tak Python je předinstalován na počítači Mac, a také k dispozici online na tomto odkazu. 115 00:08:53,770 --> 00:08:57,350 Takže pokud se díváte můžete pozastavit a ujistěte se, že máte Python 116 00:08:58,080 --> 00:09:00,170 jak hrajeme tady. 117 00:09:00,780 --> 00:09:06,420 K dispozici je manuální online, takže pokud jste jen psát Python do počítače 118 00:09:06,420 --> 00:09:10,500 uvidíte, že verze přichází do terminálu. 119 00:09:11,070 --> 00:09:17,720 Tak jsem poskytl odkaz manuálu pro verzi 2 Pythonu, stejně jako tahák. 120 00:09:17,720 --> 00:09:23,100 K dispozici je verze 3 Pythonu, ale váš Mac, nemusí nutně 121 00:09:23,100 --> 00:09:25,130 přišel s tím předem. 122 00:09:25,130 --> 00:09:27,360 Takže není příliš odlišný. 123 00:09:27,360 --> 00:09:33,270 Dobře, takže některé základy pomocí regulárních výrazů v Pythonu. 124 00:09:34,080 --> 00:09:42,650 >> Tak tady jsem použil velmi jednoduchý výraz, tak jsem to udělal Python import re 125 00:09:43,750 --> 00:09:47,070 a poté se výsledek re.search. 126 00:09:47,070 --> 00:09:49,910 A hledání trvá 2 argumenty. 127 00:09:49,910 --> 00:09:56,040 Prvním z nich je regulární výraz, a druhý je text 128 00:09:56,040 --> 00:09:58,290 nebo řetězec, který chcete analyzovat. 129 00:09:58,290 --> 00:10:01,210 A pak jsem vytisknout na result.group. 130 00:10:01,580 --> 00:10:05,860 Takže to jsou dvě základní funkce, které budeme dnes vidět 131 00:10:06,790 --> 00:10:10,170 dozvědět se o regulárních výrazech. 132 00:10:10,170 --> 00:10:12,880 Takže jen poškodí tento regulární výraz zde 133 00:10:12,880 --> 00:10:21,770 h a pak \ w a pak jsem tak \ w právě přijímá jakoukoli abecední znak tam. 134 00:10:21,850 --> 00:10:26,820 Tak tady jsme hledali "h" a pak další abecední znak, 135 00:10:26,820 --> 00:10:30,060 a poté klávesu m, takže zde by odpovídalo š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ýsledkem této skupiny. 138 00:10:37,680 --> 00:10:43,130 Další věc, kterou můžeme udělat, je využít našich před textových řetězců v jazyce Python. 139 00:10:43,130 --> 00:10:46,220 Takže myslím, že budu pokračovat a vytáhnout, že až tady. 140 00:10:46,220 --> 00:10:49,210 Python import znovu. 141 00:10:50,070 --> 00:10:54,000 A pokud bych měl udělat totéž - řekněme text, 142 00:10:55,390 --> 00:11:00,800 "Abraham," pojďme přiblížit - jdeme na to. 143 00:11:01,610 --> 00:11:06,430 Text zní: "Abraham jí šunku." 144 00:11:07,460 --> 00:11:15,260 Dobře, a pak výsledek = re.search. 145 00:11:16,260 --> 00:11:22,020 A pak naše Výraz může být h, a pak to udělám dot m. 146 00:11:22,020 --> 00:11:26,280 Takže tečka prostě trvá libovolný znak, který není nový řádek včetně čísel, 147 00:11:26,280 --> 00:11:28,650 procentních znaky, něco podobného. 148 00:11:28,650 --> 00:11:38,030 A pak textu - boom - a pak result.group--jo. 149 00:11:38,030 --> 00:11:41,820 Tak, že je to, jak realizovat základní funkce zde. 150 00:11:42,300 --> 00:11:55,110 Pokud bychom měli textovou prsten, který - ten bláznivý textu - včetně říct spoustu zpětných lomítek 151 00:11:55,110 --> 00:12:01,180 a řetězce uvnitř a věci, které by mohl vypadat escape sekvencí, 152 00:12:01,180 --> 00:12:08,480 pak se pravděpodobně budete chtít používat syrové zadávání textu se ujistit, že je přijat. 153 00:12:08,480 --> 00:12:14,120 A to jen vypadá takhle. 154 00:12:14,120 --> 00:12:17,810 Takže pokud jsme hledali každý z nich tam bychom neměli nic najít. 155 00:12:19,070 --> 00:12:21,680 Ale to je, jak byste je provádět, těsně před řetězec 156 00:12:21,680 --> 00:12:24,990 regulární výraz vložíte písmeno R. 157 00:12:26,150 --> 00:12:30,260 >> Dobře, tak pojďme dál. 158 00:12:30,260 --> 00:12:33,730 Dobře - takže pojďme se podívat na několik opakujících se vzorců zde. 159 00:12:34,750 --> 00:12:39,150 Takže jedna věc, kterou chcete udělat, je opakovat věci 160 00:12:40,040 --> 00:12:42,480 jak jste prohledávání textu. 161 00:12:42,480 --> 00:12:48,300 Takže to následovaným libovolným počtem b - ty ab *. 162 00:12:48,630 --> 00:12:51,620 A pak existuje řada dalších pravidel taky. 163 00:12:51,620 --> 00:12:54,380 A můžete se podívat ve všech těchto nahoru, budu jen spustit přes některé 164 00:12:54,380 --> 00:12:57,630 Nejčastěji používaným ty. 165 00:12:57,630 --> 00:13:03,920 Takže ab + je následované libovolnou N větší než 0 z b. 166 00:13:04,510 --> 00:13:08,000 ab? je následuje 0 nebo 1 v B. 167 00:13:09,190 --> 00:13:18,580 ab {N} je následovaný N b, a tak dále. 168 00:13:18,580 --> 00:13:22,820 Máte-li dvě čísla ve složených závorkách jste zadali rozsah 169 00:13:23,300 --> 00:13:25,440 který může být případně přizpůsobeny. 170 00:13:26,390 --> 00:13:30,420 Takže se podíváme více na několik opakujících se vzorců za minutu. 171 00:13:31,960 --> 00:13:42,300 Takže dvě věci mít na paměti při použití těchto nástrojů pro porovnávání vzorků zde. 172 00:13:42,300 --> 00:13:52,120 Takže říci, chceme se podívat na HM na "Abraham Lincoln je šunkové sendviče." 173 00:13:52,120 --> 00:13:55,230 Tak jsem změnil Abraham Lincoln jméno Abrahamovi. 174 00:13:55,230 --> 00:14:00,290 A teď hledáme to, co je vrácená touto funkcí vyhledávání, 175 00:14:00,290 --> 00:14:03,270 a to jen vrátí šunka v tomto případě. 176 00:14:03,620 --> 00:14:08,080 A to proto, že hledání právě přirozeně má zcela vlevo fronty. 177 00:14:08,080 --> 00:14:12,130 A všechny regulární výrazy pokud neurčíte jinak to udělá. 178 00:14:12,830 --> 00:14:18,880 Pokud bychom chtěli najít vše, co je funkce, která - najít všechny. 179 00:14:18,880 --> 00:14:35,100 Takže mohl vypadat all = re.findall ("h.m", text) 180 00:14:35,100 --> 00:14:44,540 a pak all.group (). 181 00:14:44,540 --> 00:14:51,040 Všechny produkuje i šunka a šunka, v tomto případě obou řetězců v Abrahamovi každé šunky. 182 00:14:51,610 --> 00:14:55,110 Takže to je další možnost. 183 00:14:56,250 --> 00:15:06,940 >> Great. Další věc, kterou byste měli mít na paměti, že regulární výrazy se největší intuitivně. 184 00:15:06,940 --> 00:15:09,520 Podívejme se na tento příklad. 185 00:15:10,200 --> 00:15:16,070 Udělali jsme to zcela vlevo hledat zde, a pak jsem se pokusil o větší hledání 186 00:15:16,070 --> 00:15:18,800 pomocí Kleene hvězda operátora. 187 00:15:18,800 --> 00:15:24,180 Takže, "Abraham Lincoln dělá šunka sendviče," a mám jen zadní 188 00:15:24,180 --> 00:15:26,280 m jako výsledek. 189 00:15:26,280 --> 00:15:31,670 Důvodem pro tuto chybu, že jsem mohl vzít libovolný počet 190 00:15:31,670 --> 00:15:36,140 h je to proto, že jsem neuvedl nic, co by jít mezi h a m. 191 00:15:36,140 --> 00:15:42,010 Jediným příkladem je, že kdyby m - pouze příklady, tam se v ní m 192 00:15:42,010 --> 00:15:46,220 a libovolný počet H je byli jen řetězec metrů. 193 00:15:46,490 --> 00:15:51,850 Pak jsem to zkusil znovu, řekl jsem: "Dobře, pojďme si aktuální největší skupinu." 194 00:15:51,850 --> 00:15:59,670 A pak jsem h.. * M, tak aby právě vrací libovolný počet znaků mezi h a m. 195 00:16:00,280 --> 00:16:02,950 A pokud jste právě začínáte a myslí si: "Oh, bude v pořádku, dobře to 196 00:16:02,950 --> 00:16:11,560 mi šunku, "je to vlastně vezme vše od h do Abrahama Lincolna 197 00:16:11,560 --> 00:16:13,690 celou cestu až do konce šunky. 198 00:16:14,040 --> 00:16:18,110 Je to chamtivý, to vidí h - to vše jiný text - m, 199 00:16:18,110 --> 00:16:21,280 a to je to, co je potřeba dovnitř 200 00:16:22,060 --> 00:16:27,480 Toto je obzvláště pozoruhodné - to je vlastnost, můžeme také 201 00:16:27,480 --> 00:16:30,670 specifikovat pro to být chamtivý pomocí jiných funkcí. 202 00:16:31,480 --> 00:16:34,490 Ale to je něco, co musíme mít na paměti zejména 203 00:16:34,490 --> 00:16:38,720 při pohledu na HTML text, který je jedním z důvodů, které 204 00:16:38,720 --> 00:16:41,500 regulární výrazy jsou obtížné pro HTML. 205 00:16:42,460 --> 00:16:46,310 Protože pokud máte otevřenou HTML tag a pak spoustu věcí ve středu 206 00:16:46,310 --> 00:16:49,820 a některé další HTML uzavřený tag mnohem později v programu, 207 00:16:49,820 --> 00:16:55,420 jste právě snědli hodně kódu HTML možná omylem. 208 00:16:56,200 --> 00:17:01,840 >> V pořádku - takže další speciální znaky, jako mnoho jiných jazyků, 209 00:17:01,840 --> 00:17:04,780 utečeme pomocí lomítka. 210 00:17:04,780 --> 00:17:10,329 Takže můžeme použít tečku zadat libovolný znak kromě nového řádku. 211 00:17:10,329 --> 00:17:14,550 Můžeme použít únikovou w zadat jakýkoli abecední znak. 212 00:17:14,550 --> 00:17:20,329 A obdobně escape d pro nějaké celé číslo - číselné charakter. 213 00:17:20,630 --> 00:17:27,440 Můžeme určit - můžeme použít závorky pro určení související výrazy. 214 00:17:27,440 --> 00:17:30,970 Takže by to přijmout, b nebo c.. 215 00:17:31,320 --> 00:17:37,000 A také můžeme určit, nebo pro některé z možností A nebo B. 216 00:17:37,000 --> 00:17:41,110 Například - pokud bychom hledali více možností 217 00:17:41,110 --> 00:17:44,940 v závorce můžeme použít operátor OR jako v - 218 00:17:44,940 --> 00:17:52,480 takže vraťme se k tomuto příkladu zde. 219 00:17:53,000 --> 00:17:59,790 A teď pojďme - vraťme se k tomuto příkladu tady, a pak 220 00:17:59,790 --> 00:18:12,290 se ae - takže by to mělo vrátit - myslím, že je to stále Abraham. 221 00:18:12,290 --> 00:18:17,410 Takže to - pokud budeme dělat všechno - skvělé. 222 00:18:17,410 --> 00:18:22,700 Takže pojďme aktualizovat text. 223 00:18:22,700 --> 00:18:34,690 "Abraham jí šunku, zatímco jeho lemování -. Zatímco lemování" Great. 224 00:18:44,090 --> 00:18:47,330 Vše. Great. Nyní jsme si šunka, šunka, a lem. 225 00:18:48,510 --> 00:18:59,370 Zatímco lemování - při hučení mu - když bzučí na lemu něj. Great. 226 00:19:00,350 --> 00:19:03,250 To je totéž. 227 00:19:03,820 --> 00:19:09,180 Nyní vše vrací stále jen šunka, šunka a lem bez vyzvednutí na hučení nebo jím. 228 00:19:09,940 --> 00:19:22,600 Velký - tak co kdybychom chtěli podívat na jeden, který - a tak bychom mohli také udělat 229 00:19:23,510 --> 00:19:33,810 ho nebo - Vrátíme se k tomu. 230 00:19:34,810 --> 00:19:45,760 Dobře - tak - v pořádku - na pozicích, můžete také použít stříška nebo znak dolaru 231 00:19:45,760 --> 00:19:49,350 určit, že hledáte něco, co na začátku nebo na konci řetězce. 232 00:19:50,260 --> 00:19:52,260 Nebo na začátku nebo na konci slova. 233 00:19:52,400 --> 00:19:54,470 To je jeden způsob, jak využít to. 234 00:19:55,630 --> 00:20:01,160 >> Dobře - tak pojďme hrát s mírně větší blok textu. 235 00:20:03,950 --> 00:20:08,310 Řekněme, že tento řádek zde - toto prohlášení zde. 236 00:20:08,310 --> 00:20:11,360 Síla regulárního výrazu je to, že můžete zadat vzory 237 00:20:11,360 --> 00:20:13,390 nejen pevné postavy. 238 00:20:14,900 --> 00:20:18,790 Učiňme - nazvěme tento blok. 239 00:20:22,400 --> 00:20:27,110 Pak budeme číst všechno palců 240 00:20:28,890 --> 00:20:50,820 A pak - učiňme vše =, takže jaké jsou některé věci, které můžeme vyhledávat sem se ziskem? 241 00:20:50,820 --> 00:20:54,070 Mohli bychom hledat výraz ucha. 242 00:20:55,050 --> 00:21:01,520 Ne moc zajímavé. Co vy na to? Uvidíme, co se stane. 243 00:21:03,710 --> 00:21:05,710 Dal jsem to problém. 244 00:21:06,380 --> 00:21:10,750 Takže celá řada věcí, než znovu a všem. 245 00:21:10,750 --> 00:21:15,630 Tak, že by se měl vrátit vše od začátku až do všech re možná párkrát. 246 00:21:18,800 --> 00:21:21,970 A pak tady máme moc regulárních výrazů je, že 247 00:21:21,970 --> 00:21:24,900 Můžete zadat vzory nejsou jen postavy jsou zde. 248 00:21:24,900 --> 00:21:28,510 Takže celou cestu až do konečného re, začalo to nejvíce vlevo a byl nenasytný. 249 00:21:30,710 --> 00:21:32,710 Podívejme se - co jiného bychom mohli hledat. 250 00:21:32,710 --> 00:21:39,860 Myslím, že jedna věc, pokud jste byli zájem hledal zájmena ona a on, 251 00:21:39,860 --> 00:21:44,600 můžete zkontrolovat s je rovna 0 nebo 1 252 00:21:44,600 --> 00:21:49,710 a výraz mu, a že se pravděpodobně nebude návratu - 253 00:21:49,710 --> 00:21:58,020 oh, myslím, že to vrátil, protože tam jsme se při pohledu na výkon, ten den, tady jsou. 254 00:22:00,590 --> 00:22:06,270 Pokusme se upřesňuje, že to má přijít na začátku něčeho. 255 00:22:06,640 --> 00:22:09,530 Uvidíme, jestli to klesá. 256 00:22:09,530 --> 00:22:19,630 Takže můžeme dělat tuk, a tam jsme se nedostali nic, protože ona a on 257 00:22:19,630 --> 00:22:22,870 se nevyskytují v této větě. 258 00:22:24,960 --> 00:22:30,410 Great. Dobře - takže zpátky ke kočce zde. 259 00:22:30,410 --> 00:22:35,720 Tak složité vzory poškozuje mozek. 260 00:22:35,720 --> 00:22:40,500 Takže to je důvod, proč používat regulární výrazy, aby se zabránilo těmto otázkám. 261 00:22:40,820 --> 00:22:43,520 >> Takže tady jsou některé další užitečné režimy, které můžete hrát s kolem. 262 00:22:43,520 --> 00:22:50,290 Podívali jsme se na hledání dnes, ale můžete také použít zápasu, Split, FindAll a skupiny. 263 00:22:50,290 --> 00:22:53,970 Takže další super věci, které můžete dělat s regulárními výrazy kromě právě 264 00:22:53,970 --> 00:22:58,870 hledají vzory bere vzor a drží všechny zápasy - 265 00:22:58,870 --> 00:23:02,530 jeho proměnné - a pak používat ty v kódu později. 266 00:23:02,850 --> 00:23:05,980 To může být docela užitečné. Ostatní věci, by mohlo být počítání. 267 00:23:05,980 --> 00:23:11,720 Takže můžeme spočítat počet instancí regulárního výrazu, 268 00:23:11,720 --> 00:23:13,960 a to je to, co lze použít pro skupiny. 269 00:23:13,960 --> 00:23:17,550 A ostatní druhy a jsou také možné. 270 00:23:18,040 --> 00:23:22,980 Tak jsem chtěl mluvit trochu víc o jiných způsobů, jak můžete použít regulární výrazy. 271 00:23:22,980 --> 00:23:29,100 >> Takže jeden z aplikací je ve fuzzy shody. 272 00:23:29,100 --> 00:23:33,450 Takže pokud hledáte nějaký text projevu, Julius Caesar, 273 00:23:33,450 --> 00:23:37,740 a uvidíte jeden Gaius Julius Caesar nebo název Julius Caesar v jiných jazycích, 274 00:23:37,740 --> 00:23:44,400 pak budete také chtít přiřadit nějakou váhu těchto hodnot. 275 00:23:44,400 --> 00:23:48,930 A pokud je to tak blízko, že - pokud to překročí určitou mez - pak chcete 276 00:23:48,930 --> 00:23:50,860 být schopni přijmout Julius Caesar. 277 00:23:50,860 --> 00:24:00,580 Takže existuje několik různých implementace pro to, že v několika dalších jazycích. 278 00:24:02,580 --> 00:24:08,420 Zde jsou některé další nástroje, Regex pal - šikovný malý app online 279 00:24:08,420 --> 00:24:12,190 Zkontrolujte, zda vaše regulární výrazy jsou tvořeny správně. 280 00:24:12,190 --> 00:24:18,500 K dispozici jsou také samostatné nástroje, které můžete spustit z počítače 281 00:24:18,500 --> 00:24:22,100 jako Ultra Pico, a stejně jako jen kuchařské knihy. 282 00:24:22,100 --> 00:24:25,410 Takže pokud děláte projekt, který zahrnuje spoustu regulárních výrazů 283 00:24:25,410 --> 00:24:29,810 to je pravděpodobně místo, kam jít mimo rámec dnes. 284 00:24:31,520 --> 00:24:35,770 A pak už jen, aby vám pocit, jak je to běžné 285 00:24:35,770 --> 00:24:44,090 je grep v Unixu, Perl má vestavěný a C je PCRE pro C. 286 00:24:44,090 --> 00:24:48,890 A pak to všechno ostatní jazyky mají také regulární výrazy balíčky 287 00:24:48,890 --> 00:24:52,020 které působí podstatě se stejnou syntaxi jsme dostali chuť dnes. 288 00:24:52,020 --> 00:24:54,790 PHP, Java, Ruby, a tak dále. 289 00:24:56,080 --> 00:24:58,980 >> Google Code Search je ve skutečnosti stojí za zmínku, je to jedna z 290 00:24:58,980 --> 00:25:05,720 poměrně málo aplikací tam, že umožňuje veřejnosti přístup k 291 00:25:05,720 --> 00:25:07,800 jeho databáze pomocí regulárních výrazů. 292 00:25:07,800 --> 00:25:12,920 Takže když se podíváte na Google Code Search najdete kód 293 00:25:12,920 --> 00:25:16,880 pokud hledáte pro instanci, jak by být funkce použita, 294 00:25:16,880 --> 00:25:21,610 můžete použít regulární výraz najít tuto funkci používán v nejrůznějších různých případů. 295 00:25:21,610 --> 00:25:28,000 Můžete se podívat na fwrite, a pak byste se mohli podívat na vlajku číst nebo psát 296 00:25:28,000 --> 00:25:32,000 pokud byste chtěli příklad fwrite použitého v tomto případě. 297 00:25:33,530 --> 00:25:37,010 Takže totéž tam, a zde jsou některé odkazy. 298 00:25:37,010 --> 00:25:40,990 To bude k dispozici on-line, stejně tak jde dopředu v případě 299 00:25:40,990 --> 00:25:45,560 Chcete-li se podívejme na Python, Perl, grep - stačí chtít získat nějakou inspiraci 300 00:25:45,560 --> 00:25:50,650 nebo chcete-li se podívat více na teorii zde jsou některé dobré Odrazovým místech. 301 00:25:50,650 --> 00:25:53,870 Děkuju mnohokrát. 302 00:25:58,470 --> 00:25:59,910 [CS50.TV]