1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Seminarium: wzorzec dopasowania wyrażeń regularnych] 2 00:00:02,000 --> 00:00:04,000 [John Mussman-Harvard University] 3 00:00:04,000 --> 00:00:07,220 [To jest CS50.-CS50.TV] 4 00:00:07,780 --> 00:00:11,610 Okay. Cóż, witajcie wszyscy. To CS50 2012. 5 00:00:11,780 --> 00:00:16,610 Nazywam się John, a ja będę mówić dzisiaj o wyrażeniach regularnych. 6 00:00:16,610 --> 00:00:22,530 Wyrażenia regularne to przede wszystkim narzędzie, ale także czasami używane 7 00:00:22,530 --> 00:00:28,650 w kodzie aktywnie zasadniczo dopasować wzory i smyczki. 8 00:00:28,650 --> 00:00:33,800 Więc oto komiks internetowy z XKCD. 9 00:00:34,440 --> 00:00:42,370 W tym komiksie nie jest tajemnica morderstwa, w którym morderca ma 10 00:00:42,370 --> 00:00:47,860 po kogoś na wakacjach, a bohaterowie muszą 11 00:00:47,860 --> 00:00:52,500 przeszukiwać 200 megabajtów maili szukają adres. 12 00:00:52,500 --> 00:00:56,090 A są one o rezygnacji, kiedy ktoś, kto zna wyrażeń regularnych - 13 00:00:56,090 --> 00:01:00,550 przypuszczalnie superhero - swoops dół i pisze jakiś kod 14 00:01:00,550 --> 00:01:02,970 i rozwiązuje zagadkę morderstwa. 15 00:01:02,970 --> 00:01:07,370 Więc prawdopodobnie to będzie coś, co będzie do tego upoważnione 16 00:01:07,370 --> 00:01:09,370 po tym seminarium. 17 00:01:09,370 --> 00:01:12,250 Jesteśmy po prostu będzie zwięzłe wprowadzenie do języka 18 00:01:12,250 --> 00:01:16,770 i daje wystarczająco dużo środków, by przejść po więcej środków na własną rękę. 19 00:01:17,680 --> 00:01:21,700 >> Więc wyrażenia regularne wygląda w zasadzie tak. 20 00:01:22,930 --> 00:01:25,550 To wyrażenie regularne w Ruby. 21 00:01:25,550 --> 00:01:29,280 To nie jest strasznie różni się w różnych językach. 22 00:01:29,690 --> 00:01:37,630 Mamy tylko na ukośniki, aby rozpocząć i zaznaczyć wyrażenia regularnego w Ruby. 23 00:01:37,630 --> 00:01:42,880 I to jest wyrażenie regularne szukać w strukturze adresu e-mail. 24 00:01:42,880 --> 00:01:49,160 Widzimy więc, w pierwszym trochę wygląda na dowolny znak alfanumeryczny. 25 00:01:50,500 --> 00:01:54,880 To dlatego, że adresy e-mail często zacząć z liter alfabetu. 26 00:01:55,460 --> 00:01:59,330 I wtedy każdy znak specjalny, a następnie symbolu @. 27 00:01:59,330 --> 00:02:03,260 A potem to samo dla nazwy domeny. 28 00:02:03,260 --> 00:02:10,030 A potem od 2 do 4 znaków szukać. Com. Net, i tak dalej. 29 00:02:10,850 --> 00:02:13,200 Więc to jest kolejny przykład wyrażenie regularne. 30 00:02:13,200 --> 00:02:17,270 Więc wyrażenia regularne są protokoły znalezienie wzorach w tekście. 31 00:02:17,270 --> 00:02:21,130 Robią porównań, wybory, i wymiany. 32 00:02:21,690 --> 00:02:27,970 Więc Trzecim przykładem jest znalezienie wszystkie numery kończące się 54 w katalogu. 33 00:02:27,970 --> 00:02:34,360 Więc przed RIP David górę CS50 katalogu możemy sprawdzić 34 00:02:34,360 --> 00:02:40,450 wzór, gdzie mamy nawiasy następnie 3 numery, a następnie zakończyć nawias, 35 00:02:40,450 --> 00:02:44,070 3 więcej numerów, myślnik, 2 numery, a następnie 54. 36 00:02:44,070 --> 00:02:48,310 I to byłoby w istocie, jak wymyślić wyrażeń regularnych do wyszukiwania za to. 37 00:02:49,150 --> 00:02:52,960 >> Tak więc istnieją - zrobiliśmy kilka rzeczy w CS50, że są trochę jak 38 00:02:52,960 --> 00:02:59,740 wyrażenia regularne, więc - na przykład - w dictionary.C pliku 39 00:02:59,740 --> 00:03:04,720 do sprawdzania pisowni zestawu problemu może użyłeś fscanf 40 00:03:04,720 --> 00:03:07,930 przeczytać w słowa ze słownika. 41 00:03:07,930 --> 00:03:16,240 I widać 45s procent szuka ciąg 45 znaków. 42 00:03:16,240 --> 00:03:20,020 Więc to jest trochę jak prymitywny wyrażenie regularne. 43 00:03:21,150 --> 00:03:26,060 A może masz jakieś 45 znaków, które pasują tam rachunek 44 00:03:26,060 --> 00:03:28,080 i wybrać te góry. 45 00:03:28,080 --> 00:03:33,480 A potem drugi przykład w ostatnim problemie programowania WWW 46 00:03:33,480 --> 00:03:40,760 ustawić w kodzie distro dla PHP rzeczywiście mają proste wyrażenie regularne. 47 00:03:40,760 --> 00:03:46,790 A ten jest po prostu chce sprawdzić, czy strona internetowa, która jest przekazywana 48 00:03:46,790 --> 00:03:51,940 pasuje zarówno zalogowaniem lub wylogowaniem się zalogować. PHP. 49 00:03:52,220 --> 00:03:57,910 A potem powrót prawdziwe lub fałszywe na podstawie tej zgodności wyrażenia regularnego. 50 00:03:59,400 --> 00:04:01,740 >> Więc jeśli używasz wyrażenia regularnego? 51 00:04:01,740 --> 00:04:04,820 Dlaczego tu jesteś dzisiaj? 52 00:04:05,330 --> 00:04:08,480 Więc nie chcę użyć wyrażenia regularnego, gdy jest coś, co 53 00:04:08,480 --> 00:04:11,640 nie praca dla Ciebie jeszcze łatwiejsze. 54 00:04:11,640 --> 00:04:15,510 Więc XML i HTML są rzeczywiście bardzo trudne 55 00:04:15,510 --> 00:04:18,480 pisać wyrażenia regularne, jak zobaczymy w trochę. 56 00:04:19,110 --> 00:04:23,280 Tak więc są dedykowane parsery dla tych języków. 57 00:04:24,170 --> 00:04:30,060 Musisz także być w porządku z kompromisów i dokładność często. 58 00:04:30,060 --> 00:04:36,220 Jeśli próbujesz - tak widzieliśmy wyrażenia regularnego na adres e-mail, 59 00:04:37,370 --> 00:04:42,590 ale że chcesz konkretny adres e-mail i stopniowo 60 00:04:42,590 --> 00:04:48,570 Wyrażenie regularne może stać się bardziej złożone, jak stało się bardziej precyzyjne. 61 00:04:49,580 --> 00:04:52,260 Tak, że będzie jeden kompromis. 62 00:04:52,260 --> 00:04:55,330 Musisz być pewien, że jesteś w porządku co do wyrażenia regularnego. 63 00:04:55,330 --> 00:04:57,920 Jeśli wiesz dokładnie, co szukasz to może więcej sensu 64 00:04:57,920 --> 00:05:02,070 umieścić w czasie i napisać bardziej efektywne parser. 65 00:05:02,070 --> 00:05:06,980 I jest wreszcie historyczny problem z regularnością 66 00:05:06,980 --> 00:05:08,940 wyrażeń i języków. 67 00:05:08,940 --> 00:05:12,960 Wyrażenia regularne są w rzeczywistości o wiele więcej możliwości niż 68 00:05:12,960 --> 00:05:16,450 wyrażenia regularne na powiedzieć w sensie formalnym. 69 00:05:17,130 --> 00:05:20,150 >> Więc nie chcę iść za daleko w formalną teorią, 70 00:05:20,150 --> 00:05:24,000 ale większość języków, że kod w rzeczywistości nie są prawidłowe. 71 00:05:24,000 --> 00:05:29,110 I dlatego wyrażenia regularne czasami nie są uważane za wszystko, co bezpieczne. 72 00:05:29,670 --> 00:05:33,150 Więc w zasadzie nie ma hierarchii Chomsky o językach, 73 00:05:33,150 --> 00:05:38,400 i wyrażenia regularne są budowane przy użyciu zjednoczenie, konkatenacji, 74 00:05:38,400 --> 00:05:41,810 i działanie gwiazda Kleene, że zobaczymy się w ciągu kilku minut. 75 00:05:43,130 --> 00:05:48,860 Jeśli jesteś zainteresowany w teorii jest dość dużo się dzieje tam pod maską. 76 00:05:50,360 --> 00:05:55,880 >> Tak krótkiej historii - tylko dla kontekście tutaj - regularne zestawy wpadł 77 00:05:55,880 --> 00:05:59,580 w 1950 roku, a następnie mieliśmy proste edytory, że 78 00:05:59,580 --> 00:06:03,300 włączone wyrażeń regularnych - po prostu szukają strun. 79 00:06:03,570 --> 00:06:09,110 Grep - który jest narzędziem wiersza poleceń - był jednym z pierwszych 80 00:06:09,110 --> 00:06:14,160 bardzo popularne narzędzia, które włączone wyrażeń regularnych w 1960 roku. 81 00:06:14,160 --> 00:06:20,560 W latach 80-tych, Perl został zbudowany - to język programowania, który 82 00:06:20,560 --> 00:06:24,110 zawiera wyrażenia regularne, bardzo wyraźnie. 83 00:06:24,550 --> 00:06:30,130 A potem ostatnio mieliśmy wyrażenie regularne Perla 84 00:06:30,130 --> 00:06:35,870 protokołów w zasadzie w innych językach, które używają dużo tej samej składni. 85 00:06:36,630 --> 00:06:39,840 Oczywiście najważniejszym wydarzeniem w 2008 roku było 86 00:06:39,840 --> 00:06:43,040 gdzie był pierwszy Narodowy Dzień Wyrażenia regularne, 87 00:06:43,040 --> 00:06:47,350 które uważam to czerwiec 1. Jeżeli chcesz, aby świętować to. 88 00:06:48,430 --> 00:06:50,840 >> Ponownie, tylko trochę bardziej teoria tutaj. 89 00:06:52,180 --> 00:06:55,320 Tak więc istnieje kilka różnych sposobów konstruowania wyrażeń regularnych. 90 00:06:55,950 --> 00:07:02,050 Jednym z prostszych sposobów jest budowanie wypowiedzi, które będą 91 00:07:02,050 --> 00:07:07,500 działać na ciąg interpretacji - w zasadzie zbudować mały mini-program, który 92 00:07:07,500 --> 00:07:11,870 przeanalizuje kawałki łańcucha i zobaczyć, "Oh, czy to pasuje do wyrażenia regularnego, czy nie?" 93 00:07:12,250 --> 00:07:14,250 A następnie uruchom to. 94 00:07:14,250 --> 00:07:17,300 Więc jeśli masz bardzo małą wyrażenia regularnego, to prawdopodobnie 95 00:07:17,300 --> 00:07:19,380 Najbardziej skutecznym sposobem, aby to zrobić. 96 00:07:20,090 --> 00:07:25,420 A jeśli ty - innej opcji jest utrzymanie rekonstrukcji 97 00:07:25,420 --> 00:07:30,260 Wyrażenie as you go, i że jest możliwość symulacji. 98 00:07:30,440 --> 00:07:37,690 I te wczesne próby regularnych algorytmów ekspresyjne 99 00:07:37,690 --> 00:07:44,330 stosunkowo proste i stosunkowo szybko, ale nie ma dużo elastyczności. 100 00:07:44,330 --> 00:07:47,500 Więc zrobić jeszcze kilka rzeczy, które mamy zamiar spojrzeć na 101 00:07:47,500 --> 00:07:52,860 dzisiaj musieliśmy zrobić bardziej skomplikowane wyrażenie regularne 102 00:07:52,860 --> 00:07:56,650 implementacje, które są potencjalnie znacznie wolniej, tak, że jest coś, aby pamiętać 103 00:07:57,510 --> 00:08:02,920 Istnieje również regularne odmowa wyrażenia odmiany ataku 104 00:08:02,920 --> 00:08:08,330 że wykorzystanie potencjału tych nowszych implementacjach 105 00:08:08,330 --> 00:08:10,930 wyrażenia regularne, aby stać się bardzo skomplikowane. 106 00:08:11,570 --> 00:08:15,650 I w bardzo sensie samej, którą widzieliśmy w atakami przepełnienia bufora, 107 00:08:15,650 --> 00:08:21,610 masz ataki, które działają poprzez cykliczne pętle 108 00:08:21,610 --> 00:08:24,400 przekroczenia pojemności pamięci. 109 00:08:24,780 --> 00:08:29,540 A tak przy okazji Regexen jest jednym z oficjalnych mnogiej o wyrażenie regularne 110 00:08:29,540 --> 00:08:32,890 przez analogię do wołów w anglosaskim. 111 00:08:33,500 --> 00:08:40,169 >> Okay, więc Library Python wielu z was tutaj osobiście mieć Mac, 112 00:08:40,169 --> 00:08:43,860 więc rzeczywiście można wyciągnąć to się na ekranie. 113 00:08:43,860 --> 00:08:47,480 Wyrażenia regularne są wbudowane w Pythonie. 114 00:08:48,070 --> 00:08:53,020 A więc Python jest fabrycznie na komputerach Mac, a także dostępny w sieci pod tym linkiem. 115 00:08:53,770 --> 00:08:57,350 Tak więc jeśli oglądasz można zatrzymać i upewnić się, że Python 116 00:08:58,080 --> 00:09:00,170 jak grać tutaj. 117 00:09:00,780 --> 00:09:06,420 Nie ma obsługi online, więc jeśli po prostu wpisz Pythona do komputera 118 00:09:06,420 --> 00:09:10,500 widać, że wersja pojawia się w terminalu. 119 00:09:11,070 --> 00:09:17,720 Więc podałem link do instrukcji dla wersji 2 Pythona, a także ściągawki. 120 00:09:17,720 --> 00:09:23,100 Istnieje wersja 3 Pythonie, ale Mac nie musi 121 00:09:23,100 --> 00:09:25,130 się z tym fabrycznie. 122 00:09:25,130 --> 00:09:27,360 Więc nie za bardzo różne. 123 00:09:27,360 --> 00:09:33,270 Okay, więc pewne podstawy korzystania z wyrażeń regularnych w Pythonie. 124 00:09:34,080 --> 00:09:42,650 >> Więc użyłem bardzo prostego wyrażenia, więc zrobiłem re import Python 125 00:09:43,750 --> 00:09:47,070 a następnie wziął wynik re.search. 126 00:09:47,070 --> 00:09:49,910 I szukaj trwa 2 argumenty. 127 00:09:49,910 --> 00:09:56,040 Pierwszym z nich jest wyrażenie regularne, a drugi jest tekst 128 00:09:56,040 --> 00:09:58,290 lub napis, który chcesz przeanalizować. 129 00:09:58,290 --> 00:10:01,210 A potem wydrukować na result.group. 130 00:10:01,580 --> 00:10:05,860 Więc to są 2 podstawowe funkcje mamy zamiar zobaczyć dziś 131 00:10:06,790 --> 00:10:10,170 w nauce o wyrażeniach regularnych. 132 00:10:10,170 --> 00:10:12,880 Więc po prostu niszczy to wyrażenie tutaj 133 00:10:12,880 --> 00:10:21,770 h, a następnie \ w, a następnie m tak \ w po prostu akceptuje każdą literę alfabetu tam. 134 00:10:21,850 --> 00:10:26,820 Więc szukamy dla "h", a następnie kolejny znak alfabetyczny 135 00:10:26,820 --> 00:10:30,060 a następnie m, więc tutaj, że będzie pasował do szynki 136 00:10:30,060 --> 00:10:34,480 w, "Abraham Lincoln i szynka kanapki." 137 00:10:35,040 --> 00:10:37,150 Jest to wynikiem tej grupy. 138 00:10:37,680 --> 00:10:43,130 Inna sprawa, że ​​możemy zrobić, to skorzystać z naszych przed ciągi tekstu w Pythonie. 139 00:10:43,130 --> 00:10:46,220 Sądzę więc, że pójdę dalej i wyciągnąć, że tutaj. 140 00:10:46,220 --> 00:10:49,210 Re import Python. 141 00:10:50,070 --> 00:10:54,000 I gdybym miał zrobić to samo - powiedzmy tekst, 142 00:10:55,390 --> 00:11:00,800 "Abraham", pozwalają nam przybliżyć - nie idziemy. 143 00:11:01,610 --> 00:11:06,430 Tekst brzmi: "Abraham zjada ham". 144 00:11:07,460 --> 00:11:15,260 Okay, a następnie doprowadzić re.search =. 145 00:11:16,260 --> 00:11:22,020 I wtedy nasze wyrażenie może być h, a następnie zrobię dot m. 146 00:11:22,020 --> 00:11:26,280 Więc dot po prostu ma żadnego znaku, który nie jest nowa linia w tym numery, 147 00:11:26,280 --> 00:11:28,650 Znaki procentowych, coś podobnego. 148 00:11:28,650 --> 00:11:38,030 A potem tekst - Boom - i wtedy result.group--tak. 149 00:11:38,030 --> 00:11:41,820 Tak to jest, jak do realizacji podstawowych funkcji tutaj. 150 00:11:42,300 --> 00:11:55,110 Gdybyśmy mieli pierścień tekst, który - że szalony tekst - zawiera powiedzieć wiele ukośników odwrotnych 151 00:11:55,110 --> 00:12:01,180 i ciągi wewnątrz i rzeczy, które mogłyby wyglądać sekwencje, 152 00:12:01,180 --> 00:12:08,480 wtedy prawdopodobnie chcesz użyć surowego wprowadzania tekstu, aby upewnić się, że jest akceptowane. 153 00:12:08,480 --> 00:12:14,120 I to właśnie tak wygląda. 154 00:12:14,120 --> 00:12:17,810 Jeśli więc szukaliśmy dla każdego z nich tam nie powinniśmy znaleźć coś. 155 00:12:19,070 --> 00:12:21,680 Ale to jest jak można wdrożyć go, tuż przed ciągiem 156 00:12:21,680 --> 00:12:24,990 wyrażenie regularne można umieścić literę r. 157 00:12:26,150 --> 00:12:30,260 >> Ok, więc niech nam dalej. 158 00:12:30,260 --> 00:12:33,730 Wszystko w porządku - więc spójrzmy na kilka wzorów powtarzalnych tutaj. 159 00:12:34,750 --> 00:12:39,150 Więc jedna rzecz, którą chcesz zrobić, to powtarzać rzeczy 160 00:12:40,040 --> 00:12:42,480 jak szukasz przez tekst. 161 00:12:42,480 --> 00:12:48,300 Tak, aby zrobić, a następnie dowolną liczbę b - robisz * ab. 162 00:12:48,630 --> 00:12:51,620 A potem są serią innych reguł też. 163 00:12:51,620 --> 00:12:54,380 I można szukać wszystkich tych działalności; Ja po prostu uruchomić poprzez niektóre 164 00:12:54,380 --> 00:12:57,630 Najczęściej używane z nich. 165 00:12:57,630 --> 00:13:03,920 So ab + jest następnie każde N większa niż 0 z b.. 166 00:13:04,510 --> 00:13:08,000 ab? jest następnie przez 0 lub 1 z B. 167 00:13:09,190 --> 00:13:18,580 AB {N} jest następnie N do B, a następnie tak dalej. 168 00:13:18,580 --> 00:13:22,820 Jeśli masz 2 numery w nawiasy, użytkownik określa zakres 169 00:13:23,300 --> 00:13:25,440 , które mogą być ewentualnie dopasowane. 170 00:13:26,390 --> 00:13:30,420 Będziemy więc przyjrzeć się na kilka wzorów powtarzalnych w minutę. 171 00:13:31,960 --> 00:13:42,300 So 2 rzeczy, o których warto pamiętać podczas korzystania z tych wzorzec dopasowania tools tutaj. 172 00:13:42,300 --> 00:13:52,120 Tak mówią chcemy spojrzeć na hm, "Abraham Lincoln robi kanapki z szynką". 173 00:13:52,120 --> 00:13:55,230 Więc zmieniłem imię Abrahama Lincolna do Abrahama. 174 00:13:55,230 --> 00:14:00,290 A teraz szukamy tego, co jest zwracany przez funkcję wyszukiwania 175 00:14:00,290 --> 00:14:03,270 a tylko zwraca szynkę w tej sprawie. 176 00:14:03,620 --> 00:14:08,080 I robi to, ponieważ search prostu naturalnie zajmuje lewy najwięcej kolejkę. 177 00:14:08,080 --> 00:14:12,130 I wszystkie wyrażenia regularne, chyba że określono inaczej zrobić. 178 00:14:12,830 --> 00:14:18,880 Jeśli chcemy, aby znaleźć wszystko, co jest funkcją tego - znaleźć wszystko. 179 00:14:18,880 --> 00:14:35,100 Tak, że może po prostu wyglądać jak wszystkie = re.findall ("h.m", tekst) 180 00:14:35,100 --> 00:14:44,540 a następnie all.group (). 181 00:14:44,540 --> 00:14:51,040 Wszystko produkuje zarówno szynki i szynki, w tym przypadku oba ciągi w Abrahama każdego szynki. 182 00:14:51,610 --> 00:14:55,110 Tak, że ma innej opcji. 183 00:14:56,250 --> 00:15:06,940 >> Great. Inną rzeczą, aby pamiętać, że wyrażenia regularne się największym intuicyjnie. 184 00:15:06,940 --> 00:15:09,520 Spójrzmy na ten przykład. 185 00:15:10,200 --> 00:15:16,070 Zrobiliśmy to szukać najbardziej na lewo, a potem próbował większą search 186 00:15:16,070 --> 00:15:18,800 używając Kleene operatora gwiazdy. 187 00:15:18,800 --> 00:15:24,180 Więc dla "Abraham Lincoln sprawia kanapki z szynką", a ja tylko wróciłam 188 00:15:24,180 --> 00:15:26,280 m wyniku. 189 00:15:26,280 --> 00:15:31,670 Powodem tego błędu było, że mogłem wziąć dowolną liczbę 190 00:15:31,670 --> 00:15:36,140 h dlatego, że nie określił by wszystko między h i m. 191 00:15:36,140 --> 00:15:42,010 Tylko przykład tam, że miał m - tam tylko przykłady w nim z m. 192 00:15:42,010 --> 00:15:46,220 oraz numerem H-tych były po prostu m ciąg. 193 00:15:46,490 --> 00:15:51,850 Potem próbowałem jeszcze raz, powiedziałem: "Dobrze, niech nam uzyskać rzeczywisty największą grupę tutaj." 194 00:15:51,850 --> 00:15:59,670 A potem zrobiłem godziny. * M, tak, że po prostu zwraca dowolną liczbę znaków między h i m. 195 00:16:00,280 --> 00:16:02,950 A jeśli dopiero zaczynasz i myśleć: "Och, dobrze, dobrze będzie 196 00:16:02,950 --> 00:16:11,560 daj mi szynkę ", to faktycznie ma wszystko od godz w Abraham Lincoln 197 00:16:11,560 --> 00:16:13,690 aż do końca szynki. 198 00:16:14,040 --> 00:16:18,110 To jest chciwy; widzi h - to wszystko inne teksty - m, 199 00:16:18,110 --> 00:16:21,280 i to jest to, czego potrzeba w. 200 00:16:22,060 --> 00:16:27,480 Jest to szczególnie rażące - jest to cecha możemy również 201 00:16:27,480 --> 00:16:30,670 określić na to nie być chciwym korzystania z innych funkcji. 202 00:16:31,480 --> 00:16:34,490 Ale to jest coś, musimy pamiętać, zwłaszcza 203 00:16:34,490 --> 00:16:38,720 patrząc na tekst HTML, który jest jednym z powodów, że 204 00:16:38,720 --> 00:16:41,500 wyrażenia regularne są trudne dla HTML. 205 00:16:42,460 --> 00:16:46,310 Bo jeśli masz otwarte tag HTML, a następnie wiele rzeczy w środku 206 00:16:46,310 --> 00:16:49,820 i niektóre inne HTML zamknięty tag znacznie później w programie, 207 00:16:49,820 --> 00:16:55,420 właśnie zjedzone dużo kodu HTML prawdopodobnie przez pomyłkę. 208 00:16:56,200 --> 00:17:01,840 >> Wszelkie prawa - więc więcej znaków specjalnych, tak jak wiele innych języków, 209 00:17:01,840 --> 00:17:04,780 uciec za pomocą ukośnika. 210 00:17:04,780 --> 00:17:10,329 Można więc użyć kropki do określenia dowolnego znaku z wyjątkiem nowej linii. 211 00:17:10,329 --> 00:17:14,550 Możemy użyć do ucieczki w, aby określić dowolną literę alfabetu. 212 00:17:14,550 --> 00:17:20,329 I przez d ucieczki analogia dowolną liczbą całkowitą - znak numeryczny. 213 00:17:20,630 --> 00:17:27,440 Możemy określić - możemy użyć nawiasów aby określić związanych wyrażeń. 214 00:17:27,440 --> 00:17:30,970 Więc to zaakceptuje, B lub C. 215 00:17:31,320 --> 00:17:37,000 Możemy także określić lub opcje A lub B. 216 00:17:37,000 --> 00:17:41,110 Na przykład - jeśli szukaliśmy wielu możliwości 217 00:17:41,110 --> 00:17:44,940 w nawiasach możemy użyć operatora OR, jak w - 218 00:17:44,940 --> 00:17:52,480 więc niech nam wrócić do tego np. tutaj. 219 00:17:53,000 --> 00:17:59,790 A teraz weźmy - wróćmy do tego przykładu tutaj, a następnie 220 00:17:59,790 --> 00:18:12,290 podjąć ae - tak to powinno powrócić - Myślę, że to jest nadal Abrahama. 221 00:18:12,290 --> 00:18:17,410 Więc - jeśli zrobimy wszystko - świetnie. 222 00:18:17,410 --> 00:18:22,700 Więc niech nam aktualizować tekst tutaj. 223 00:18:22,700 --> 00:18:34,690 "Abraham zjada szynkę podczas podszywania jego -. Podczas zawijania" Great. 224 00:18:44,090 --> 00:18:47,330 All. Great. Teraz mamy szynka, szynka, i brzeg. 225 00:18:48,510 --> 00:18:59,370 Podczas zawijania - nucąc mu - nucąc do rąbka niego. Great. 226 00:19:00,350 --> 00:19:03,250 Samo. 227 00:19:03,820 --> 00:19:09,180 Teraz powraca wciąż tylko szynka, szynka, i hem bez podnoszenia na szum lub niego. 228 00:19:09,940 --> 00:19:22,600 Great - więc co jeśli chcemy patrzeć albo że - tak możemy również zrobić 229 00:19:23,510 --> 00:19:33,810 on czy - wrócimy do tego. 230 00:19:34,810 --> 00:19:45,760 Okay - tak - wszystko w porządku - w pozycji można także użyć daszka lub dolara 231 00:19:45,760 --> 00:19:49,350 aby określić, że szukasz czegoś na początku lub na końcu łańcucha. 232 00:19:50,260 --> 00:19:52,260 Albo początek lub koniec słowa. 233 00:19:52,400 --> 00:19:54,470 To jest jeden sposób, aby użyć. 234 00:19:55,630 --> 00:20:01,160 >> Okay - więc niech nam bawić z nieco większej bloku tekstu. 235 00:20:03,950 --> 00:20:08,310 Powiedzmy, że ten wiersz tutaj - to stwierdzenie tutaj. 236 00:20:08,310 --> 00:20:11,360 Moc wyrażenia regularnego jest to, że można je określić wzory 237 00:20:11,360 --> 00:20:13,390 nie tylko fixed znaków. 238 00:20:14,900 --> 00:20:18,790 Uczyńmy - nazwijmy ten blok. 239 00:20:22,400 --> 00:20:27,110 Wtedy będziemy czytać wszystko to w. 240 00:20:28,890 --> 00:20:50,820 I wtedy - uczyńmy wszystko =, więc co to są pewne rzeczy, może szukamy tutaj zyskiem? 241 00:20:50,820 --> 00:20:54,070 Możemy szukać ucha ekspresji. 242 00:20:55,050 --> 00:21:01,520 Nie bardzo interesujące. Jak o tym? Zobaczymy, co się wydarzy. 243 00:21:03,710 --> 00:21:05,710 Dałem problem. 244 00:21:06,380 --> 00:21:10,750 Tak więc dowolna liczba rzeczy przed ponownym wszystkich. 245 00:21:10,750 --> 00:21:15,630 Tak, że powinna wrócić wszystko od początku aż do wszystkich re być może kilka razy. 246 00:21:18,800 --> 00:21:21,970 I to tutaj mamy moc wyrażeń regularnych jest to, że 247 00:21:21,970 --> 00:21:24,900 może określić wzory nie tylko postacie są tutaj. 248 00:21:24,900 --> 00:21:28,510 Więc wszystko aż do ostatecznej re, to zaczęło się od lewej najbardziej i był chciwy. 249 00:21:30,710 --> 00:21:32,710 Zobaczymy - co jeszcze możemy szukać. 250 00:21:32,710 --> 00:21:39,860 Myślę, że jedną rzecz, jeśli jesteś zainteresowany w poszukiwaniu zaimków ona i on, 251 00:21:39,860 --> 00:21:44,600 można sprawdzić s jest równe 0 lub 1 252 00:21:44,600 --> 00:21:49,710 i wyrażenie go, i że prawdopodobnie nie wrócić - 253 00:21:49,710 --> 00:21:58,020 oh, myślę, że wrócił, bo nie mamy do czynienia z mocą, że dzień, tutaj są. 254 00:22:00,590 --> 00:22:06,270 Spróbujmy podając, że ma przyjść na początku coś. 255 00:22:06,640 --> 00:22:09,530 Pozwól nam sprawdzić, czy spada. 256 00:22:09,530 --> 00:22:19,630 Tak więc możemy zrobić, tłuszcz, i nie mamy nic, bo ona i on 257 00:22:19,630 --> 00:22:22,870 nie występuje w tym zdaniu. 258 00:22:24,960 --> 00:22:30,410 Great. Okay - więc z powrotem do kota tutaj. 259 00:22:30,410 --> 00:22:35,720 Tak skomplikowane wzory krzywdzi mózg. 260 00:22:35,720 --> 00:22:40,500 Więc dlatego też użyć wyrażeń regularnych, aby uniknąć tych problemów. 261 00:22:40,820 --> 00:22:43,520 >> Więc oto kilka innych przydatnych trybów można bawić się. 262 00:22:43,520 --> 00:22:50,290 Patrzyliśmy na wyszukiwanie dzisiaj, ale można również użyć mecz, Split, FindAll oraz grup. 263 00:22:50,290 --> 00:22:53,970 Więc inne fajne rzeczy można zrobić z wyrażeń regularnych oprócz właśnie 264 00:22:53,970 --> 00:22:58,870 poszukuje wzorców bierze wzór i trzyma wszystkie mecze - 265 00:22:58,870 --> 00:23:02,530 jej zmienne - a następnie używając tych w kodzie później. 266 00:23:02,850 --> 00:23:05,980 To może być bardzo pomocne. Inne rzeczy można liczyć. 267 00:23:05,980 --> 00:23:11,720 Więc możemy policzyć liczbę wystąpień wzorca wyrażenia regularnego, 268 00:23:11,720 --> 00:23:13,960 i to jest to, co możemy używać grup do. 269 00:23:13,960 --> 00:23:17,550 I inne środki, jak również są możliwe. 270 00:23:18,040 --> 00:23:22,980 Więc po prostu chcę porozmawiać trochę więcej na temat innych sposobów korzystania z wyrażeń regularnych. 271 00:23:22,980 --> 00:23:29,100 >> Więc jedna zaawansowana aplikacja jest rozmyty dopasowywania. 272 00:23:29,100 --> 00:23:33,450 Więc jeśli szukasz tekstu do wypowiedzi, Julius Caesar, 273 00:23:33,450 --> 00:23:37,740 i widzisz albo Gajusza Juliusza Cezara lub nazwa Juliusza Cezara w innych językach, 274 00:23:37,740 --> 00:23:44,400 następnie możesz również przypisać pewną wagę do tych wartości. 275 00:23:44,400 --> 00:23:48,930 A jeśli jest to na tyle blisko, - jeżeli przekroczy pewien próg - to chcesz 276 00:23:48,930 --> 00:23:50,860 aby móc zaakceptować Juliusza Cezara. 277 00:23:50,860 --> 00:24:00,580 Tak więc istnieje kilka różnych implementacji za to w kilku innych językach, jak również. 278 00:24:02,580 --> 00:24:08,420 Oto kilka innych narzędzi, Regex Pal - mało poręczne app forum do 279 00:24:08,420 --> 00:24:12,190 sprawdzić, czy twój wyrażenia regularne są zbudowane prawidłowo. 280 00:24:12,190 --> 00:24:18,500 Istnieją również samodzielne narzędzia, które można uruchomić z poziomu pulpitu 281 00:24:18,500 --> 00:24:22,100 jak Ultra Pico, i jak również kucharskie tylko. 282 00:24:22,100 --> 00:24:25,410 Więc jeśli ten projekt, który obejmuje mnóstwo wyrażeń regularnych 283 00:24:25,410 --> 00:24:29,810 jest to prawdopodobnie miejsce, aby przejść poza zakresem dzisiaj. 284 00:24:31,520 --> 00:24:35,770 A potem po prostu dać ci poczucie, jak powszechne jest 285 00:24:35,770 --> 00:24:44,090 jest grep w systemie Unix, Perl posiada wbudowane, a C jest PCRE dla C. 286 00:24:44,090 --> 00:24:48,890 A potem wszystkie te inne języki też wyrażenie regularne pakiety 287 00:24:48,890 --> 00:24:52,020 które działają z zasadniczo składni samym dostaliśmy smak dzisiaj. 288 00:24:52,020 --> 00:24:54,790 PHP, Java, Ruby, i tak dalej. 289 00:24:56,080 --> 00:24:58,980 >> Google Code Search jest rzeczywiście warto wspomnieć, jest to jeden z 290 00:24:58,980 --> 00:25:05,720 stosunkowo niewiele aplikacji, które obecnie nie pozwala na dostęp do publicznych 291 00:25:05,720 --> 00:25:07,800 jego bazy danych za pomocą wyrażeń regularnych. 292 00:25:07,800 --> 00:25:12,920 Więc jeśli spojrzeć na Google Code Search można znaleźć kod 293 00:25:12,920 --> 00:25:16,880 jeśli szukasz instancji, jak funkcja może być używany, 294 00:25:16,880 --> 00:25:21,610 można użyć wyrażenia regularnego, aby znaleźć tę funkcję jest używany w różnego rodzaju różnych przypadkach. 295 00:25:21,610 --> 00:25:28,000 Można szukać fwrite, a następnie można szukać flaga zapisu lub odczytu 296 00:25:28,000 --> 00:25:32,000 gdybyś przykład fwrite są używane w tym przypadku. 297 00:25:33,530 --> 00:25:37,010 Tak samo jest i tutaj są pewne odniesienia. 298 00:25:37,010 --> 00:25:40,990 To będzie dostępna w Internecie, tak więc idzie do przodu w razie 299 00:25:40,990 --> 00:25:45,560 chcesz wyglądać w Pythonie, grep, Perl - po prostu chcesz trochę inspiracji 300 00:25:45,560 --> 00:25:50,650 lub jeśli chcesz wyglądać bardziej na teorii oto niektóre dobre skoki z miejsc. 301 00:25:50,650 --> 00:25:53,870 Dziękuję bardzo. 302 00:25:58,470 --> 00:25:59,910 [CS50.TV]