1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Семинар: модел за съвпадение с регулярни изрази] 2 00:00:02,000 --> 00:00:04,000 [John Mussman-Harvard University] 3 00:00:04,000 --> 00:00:07,220 [Това е CS50.-CS50.TV] 4 00:00:07,780 --> 00:00:11,610 Добре. Е, добре дошли всички. Това е CS50 2012. 5 00:00:11,780 --> 00:00:16,610 Моето име е Джон, и аз ще се говори днес за регулярни изрази. 6 00:00:16,610 --> 00:00:22,530 Регулярни изрази е основно средство, но също така понякога се използва 7 00:00:22,530 --> 00:00:28,650 в код активно същество съвпадат модели и връв. 8 00:00:28,650 --> 00:00:33,800 Така че тук е един уеб комикс от XKCD. 9 00:00:34,440 --> 00:00:42,370 В този комикс има мистерии убийство, където убиецът има 10 00:00:42,370 --> 00:00:47,860 последвано някой на почивка, и главните герои трябва да 11 00:00:47,860 --> 00:00:52,500 търси чрез 200 мегабайта имейли търсещи адрес. 12 00:00:52,500 --> 00:00:56,090 И те са на път да се откажа, когато някой, който знае регулярни изрази - 13 00:00:56,090 --> 00:01:00,550 вероятно супергерой - спуска надолу и пише някакъв код 14 00:01:00,550 --> 00:01:02,970 и решава мистерии убийство. 15 00:01:02,970 --> 00:01:07,370 Така се предполага, че ще бъде нещо, което ще бъде предоставено правомощието да направи 16 00:01:07,370 --> 00:01:09,370 след този семинар. 17 00:01:09,370 --> 00:01:12,250 Ние просто ще предоставят кратко въведение към езика 18 00:01:12,250 --> 00:01:16,770 и ще ви даде достатъчно средства, за да отиде след повече ресурси по своему. 19 00:01:17,680 --> 00:01:21,700 >> Така регулярни изрази изглежда основно като този. 20 00:01:22,930 --> 00:01:25,550 Това е регулярен израз в Ruby. 21 00:01:25,550 --> 00:01:29,280 Не е страшно различно на различни езици. 22 00:01:29,690 --> 00:01:37,630 Ние имаме само върху наклонени черти, за да започне и марки на регулярен израз в Ruby. 23 00:01:37,630 --> 00:01:42,880 И това е регулярен израз, за ​​да търсите в модел имейл адрес. 24 00:01:42,880 --> 00:01:49,160 Така ние виждаме в първия бит търси всеки буквено-цифров знак. 25 00:01:50,500 --> 00:01:54,880 Това е така, защото имейл адресите, често трябва да се започне с буква от азбуката. 26 00:01:55,460 --> 00:01:59,330 И тогава всеки специален знак, последван от символа @. 27 00:01:59,330 --> 00:02:03,260 И тогава едно и също нещо за името на домейна. 28 00:02:03,260 --> 00:02:10,030 И тогава между два и четири знака да се търси. COM,. Мрежа, и така нататък. 29 00:02:10,850 --> 00:02:13,200 Така че това е още един пример за регулярен израз. 30 00:02:13,200 --> 00:02:17,270 Така че регулярните изрази са протоколи за намиране на ритъм в текста. 31 00:02:17,270 --> 00:02:21,130 Те правят сравнения, селекции, и замяна. 32 00:02:21,690 --> 00:02:27,970 Така трети пример е намирането на всички телефонни номера, завършващи на 54 в директория. 33 00:02:27,970 --> 00:02:34,360 Така че, преди разкъсва Дейвид до директорията CS50 бихме могли да търсят 34 00:02:34,360 --> 00:02:40,450 модел, където имаме скоби след три номера след края скоби, 35 00:02:40,450 --> 00:02:44,070 3 допълнителни номера, тире, две числа, а след това 54. 36 00:02:44,070 --> 00:02:48,310 И това ще бъде по същество как да излезе с регулярен израз да търсите за това. 37 00:02:49,150 --> 00:02:52,960 >> Така че има - ние сме направили някои неща в CS50, че са малко като 38 00:02:52,960 --> 00:02:59,740 регулярни изрази, така че - например - в dictionary.C файл 39 00:02:59,740 --> 00:03:04,720 за правописа набор проверка проблем може да сте използвали fscanf 40 00:03:04,720 --> 00:03:07,930 да се чете с една дума от речника. 41 00:03:07,930 --> 00:03:16,240 И можете да видите процентното 45s търси низ от 45 символа. 42 00:03:16,240 --> 00:03:20,020 Така че това е нещо като елементарен регулярен израз. 43 00:03:21,150 --> 00:03:26,060 И вие можете да имате 45 символа, които отговарят на сметката там 44 00:03:26,060 --> 00:03:28,080 и да изберат тези, нагоре. 45 00:03:28,080 --> 00:03:33,480 И след втория пример в най-скорошния проблем уеб програмиране 46 00:03:33,480 --> 00:03:40,760 разположен в дистрибуция код за PHP всъщност имат един прост регулярен израз. 47 00:03:40,760 --> 00:03:46,790 А това е само просто гледам да проверите дали уеб страницата, която се предава в 48 00:03:46,790 --> 00:03:51,940 пасва с вход или изход се регистрирай. PHP. 49 00:03:52,220 --> 00:03:57,910 И след това се връщат вярно или невярно, че въз основа на редовен съвпадение изразяване. 50 00:03:59,400 --> 00:04:01,740 >> Така че, когато използвате регулярен израз? 51 00:04:01,740 --> 00:04:04,820 Защо сте тук днес? 52 00:04:05,330 --> 00:04:08,480 Така че не искате да използвате регулярен израз, когато има нещо, което 53 00:04:08,480 --> 00:04:11,640 върши работа за вас, още по-лесно. 54 00:04:11,640 --> 00:04:15,510 Така че, XML и HTML са всъщност доста труден 55 00:04:15,510 --> 00:04:18,480 да пише регулярни изрази за както ще видим след малко. 56 00:04:19,110 --> 00:04:23,280 Така че има специални парсъри за тези езици. 57 00:04:24,170 --> 00:04:30,060 Вие също трябва да се оправи с компромиси и точността често. 58 00:04:30,060 --> 00:04:36,220 Ако се опитвате - така видяхме регулярен израз за имейл адрес, 59 00:04:37,370 --> 00:04:42,590 но казват, че искаш конкретна имейл адрес и постепенно 60 00:04:42,590 --> 00:04:48,570 регулярен израз може да стане по-сложна, тъй като стана по-точен. 61 00:04:49,580 --> 00:04:52,260 Така че това ще бъде един компромис. 62 00:04:52,260 --> 00:04:55,330 Трябва да сте сигурни, че сте добре направи с регулярен израз. 63 00:04:55,330 --> 00:04:57,920 Ако знаете какво точно търсите може да има повече смисъл 64 00:04:57,920 --> 00:05:02,070 да се сложи във времето и да напише по-ефективно анализатор. 65 00:05:02,070 --> 00:05:06,980 И най-накрая има исторически проблем с редовността 66 00:05:06,980 --> 00:05:08,940 на изразяване и на различни езици. 67 00:05:08,940 --> 00:05:12,960 Регулярни изрази всъщност са много по-мощни, отколкото 68 00:05:12,960 --> 00:05:16,450 регулярни изрази на казват в официално смисъл. 69 00:05:17,130 --> 00:05:20,150 >> Така че аз не искам да отиват твърде далеч в официалната теория, 70 00:05:20,150 --> 00:05:24,000 но повечето езици, които ние код в действителност не са редовни. 71 00:05:24,000 --> 00:05:29,110 И това е причината регулярни изрази понякога не се считат всички, които сигурно. 72 00:05:29,670 --> 00:05:33,150 Така че основно има йерархия на Чомски за езика, 73 00:05:33,150 --> 00:05:38,400 и регулярни изрази се изгради използване съюз, конкатенация, 74 00:05:38,400 --> 00:05:41,810 и звездата Kleene операция, която ще видим в рамките на няколко минути. 75 00:05:43,130 --> 00:05:48,860 Ако се интересувате от теория има доста много неща се случват там под капака. 76 00:05:50,360 --> 00:05:55,880 >> Така кратка история - само за контекста тук - редовни набори изскочи 77 00:05:55,880 --> 00:05:59,580 през 1950-те, а след това имахме прости редактори, че 78 00:05:59,580 --> 00:06:03,300 включени регулярни изрази - просто търсите струни. 79 00:06:03,570 --> 00:06:09,110 Grep - което е командния ред инструмент - беше един от първите, 80 00:06:09,110 --> 00:06:14,160 много популярни инструменти, включени регулярни изрази през 1960. 81 00:06:14,160 --> 00:06:20,560 През 80-те, Perl е построен - е език за програмиране, че 82 00:06:20,560 --> 00:06:24,110 включва регулярни изрази много видно място. 83 00:06:24,550 --> 00:06:30,130 И тогава по-скоро ние сме имали Perl съвместими регулярен израз 84 00:06:30,130 --> 00:06:35,870 протоколи основно на други езици, които използват голяма част от същия синтаксис. 85 00:06:36,630 --> 00:06:39,840 Разбира се, най-важното събитие беше през 2008 г. 86 00:06:39,840 --> 00:06:43,040 където имаше първата Национална Редовен Ден изразяване, 87 00:06:43,040 --> 00:06:47,350 която според мен е 01 юни, ако искате да го отпразнуваме. 88 00:06:48,430 --> 00:06:50,840 >> Отново, само малко по теория тук. 89 00:06:52,180 --> 00:06:55,320 Така че има няколко различни начина на конструиране на регулярни изрази. 90 00:06:55,950 --> 00:07:02,050 Един прост начин е да се изгради на израза, който ще 91 00:07:02,050 --> 00:07:07,500 тече от низ тълкува - основно изграждане на малко мини-програма, която 92 00:07:07,500 --> 00:07:11,870 ще анализира парчета низ и да видим, "О, това се поберат на регулярен израз или не?" 93 00:07:12,250 --> 00:07:14,250 И след това да изпълните това. 94 00:07:14,250 --> 00:07:17,300 Така че, ако имате много малък регулярен израз, това е може би 95 00:07:17,300 --> 00:07:19,380 най-ефикасният начин да го направя. 96 00:07:20,090 --> 00:07:25,420 И тогава, ако - друг вариант е да се запази реконструкция на 97 00:07:25,420 --> 00:07:30,260 изразяване, както и да отидеш, и това е възможността да симулира. 98 00:07:30,440 --> 00:07:37,690 И тези ранни опити за редовни алгоритми експресия са 99 00:07:37,690 --> 00:07:44,330 сравнително прости и сравнително бързо, но не разполагате с много гъвкавост. 100 00:07:44,330 --> 00:07:47,500 Така че да се направи дори и някои от нещата, които ние ще разгледаме 101 00:07:47,500 --> 00:07:52,860 Днес трябваше да направя по-сложни регулярен израз 102 00:07:52,860 --> 00:07:56,650 реализации, които са потенциално много по-бавно, така че това е нещо, което да се има предвид, 103 00:07:57,510 --> 00:08:02,920 Освен това има и редовен отказ изразяване на атака разнообразие 104 00:08:02,920 --> 00:08:08,330 че се използва потенциалът на тези нови реализации на 105 00:08:08,330 --> 00:08:10,930 регулярни изрази, за да стана много сложна. 106 00:08:11,570 --> 00:08:15,650 И по същия смисъл, че ние видяхме в атаки за препълване на буфера, 107 00:08:15,650 --> 00:08:21,610 имате атаки, които работят като прави чести повторения, че 108 00:08:21,610 --> 00:08:24,400 превишаване на капацитета на паметта. 109 00:08:24,780 --> 00:08:29,540 И между другото Regexen е един от официалните множествено число на регулярен израз 110 00:08:29,540 --> 00:08:32,890 по аналогия с волове в англосаксонския. 111 00:08:33,500 --> 00:08:40,169 >> Добре, така че библиотеката Python много от вас тук, в лицето имат Mac-ове, 112 00:08:40,169 --> 00:08:43,860 така че всъщност можете да дръпнете този на екрана. 113 00:08:43,860 --> 00:08:47,480 Регулярните изрази са вградени в Python. 114 00:08:48,070 --> 00:08:53,020 И така, Python е предварително заредено на Mac-ове и също така на разположение онлайн в тази връзка. 115 00:08:53,770 --> 00:08:57,350 Така че, ако гледате можете да направите пауза и се уверете, че имате Python 116 00:08:58,080 --> 00:09:00,170 като играем тук. 117 00:09:00,780 --> 00:09:06,420 Има ръководство онлайн, така че ако просто напишете Python в компютъра си 118 00:09:06,420 --> 00:09:10,500 ще видите, че версията идва в терминала. 119 00:09:11,070 --> 00:09:17,720 Така че при условие връзка към потребителя за версия 2 на Python, както и мамят лист. 120 00:09:17,720 --> 00:09:23,100 Има версия 3 на Python, но си Mac не означава непременно 121 00:09:23,100 --> 00:09:25,130 идват с предварително инсталирана това. 122 00:09:25,130 --> 00:09:27,360 Така че не са ужасно различни. 123 00:09:27,360 --> 00:09:33,270 Добре, така че някои от принципите на използване на регулярни изрази в Python. 124 00:09:34,080 --> 00:09:42,650 >> Така че тук аз използвах един много прост израз, така че направих Python внос повторно 125 00:09:43,750 --> 00:09:47,070 и след това взе резултат от re.search. 126 00:09:47,070 --> 00:09:49,910 И търсенето отнема 2 аргументи. 127 00:09:49,910 --> 00:09:56,040 Първият е регулярен израз, а вторият е текста 128 00:09:56,040 --> 00:09:58,290 или низ искате да анализирате. 129 00:09:58,290 --> 00:10:01,210 И тогава аз отпечатани на result.group. 130 00:10:01,580 --> 00:10:05,860 Така че това са две основни функции, ние ще виждаме днес 131 00:10:06,790 --> 00:10:10,170 да научите за регулярни изрази. 132 00:10:10,170 --> 00:10:12,880 Така че просто се счупи този регулярен израз тук 133 00:10:12,880 --> 00:10:21,770 часа и след това \ w и след това m така \ w просто приема всяка буква от азбуката там. 134 00:10:21,850 --> 00:10:26,820 Така че тук ние търсим за "з" и после още една буква, 135 00:10:26,820 --> 00:10:30,060 и след това m, така че тук ще съответстват и шунка 136 00:10:30,060 --> 00:10:34,480 в "Ейбрахам Линкълн и сандвичи с шунка." 137 00:10:35,040 --> 00:10:37,150 Това е в резултат на тази група. 138 00:10:37,680 --> 00:10:43,130 Друго нещо, което можем да направим, е да използвате нашите преди текстови низове в Питон. 139 00:10:43,130 --> 00:10:46,220 Така че предполагам, аз ще отида напред и да дръпнеш тук. 140 00:10:46,220 --> 00:10:49,210 Python внос повторно. 141 00:10:50,070 --> 00:10:54,000 И ако трябва да направи същото нещо - да кажем, текст, 142 00:10:55,390 --> 00:11:00,800 "Авраам," нека да я увеличите - ето. 143 00:11:01,610 --> 00:11:06,430 Текстът е: "Авраам яде шунка." 144 00:11:07,460 --> 00:11:15,260 Добре, а след това доведе = re.search. 145 00:11:16,260 --> 00:11:22,020 И тогава нашият израз може да бъде ч, а след това аз ще направя точка m. 146 00:11:22,020 --> 00:11:26,280 Така че точка просто отнема всеки знак, който не е нов ред, включително техния брой, 147 00:11:26,280 --> 00:11:28,650 процентни признаци, нещо подобно. 148 00:11:28,650 --> 00:11:38,030 И тогава текст - бум - и след това result.group--да. 149 00:11:38,030 --> 00:11:41,820 Така че това е просто начина на прилагане на основните функции тук. 150 00:11:42,300 --> 00:11:55,110 Ако имахме текст пръстен, който - онзи луд текст - включени кажа много наклонени черти 151 00:11:55,110 --> 00:12:01,180 и струни вътре и неща, които може да изглеждат като ескейп последователности, 152 00:12:01,180 --> 00:12:08,480 тогава може би искате да използвате суров въвеждане на текст да се уверите, че е приет. 153 00:12:08,480 --> 00:12:14,120 И това само изглежда така. 154 00:12:14,120 --> 00:12:17,810 Така че, ако търсим всеки един от тях там не трябва да намеря нищо. 155 00:12:19,070 --> 00:12:21,680 Но това е как ще го приложи, точно преди низ от 156 00:12:21,680 --> 00:12:24,990 регулярния израз ви постави писмото R. 157 00:12:26,150 --> 00:12:30,260 >> Добре, нека да продължаваме. 158 00:12:30,260 --> 00:12:33,730 Добре - така че нека разгледаме няколко повтарящи се модели тук. 159 00:12:34,750 --> 00:12:39,150 Така че едно нещо, което искате да направите, е да повторя неща 160 00:12:40,040 --> 00:12:42,480 като търсите чрез текст. 161 00:12:42,480 --> 00:12:48,300 Така че да се направи след всеки брой на б - правите AB *. 162 00:12:48,630 --> 00:12:51,620 А има и редица други правила също. 163 00:12:51,620 --> 00:12:54,380 И вие можете да погледнете всички тези действия; просто ще премине през някои от най- 164 00:12:54,380 --> 00:12:57,630 Най-често използваните. 165 00:12:57,630 --> 00:13:03,920 Така AB + е последвано от нито един N-голямо от 0 на б. 166 00:13:04,510 --> 00:13:08,000 аб? е последвано от 0 или 1 б. 167 00:13:09,190 --> 00:13:18,580 AB {N} е последвано от N на В, и след това така нататък. 168 00:13:18,580 --> 00:13:22,820 Ако имате два номера в фигурни скоби се определя обхват 169 00:13:23,300 --> 00:13:25,440 която може да бъде евентуално съчетани. 170 00:13:26,390 --> 00:13:30,420 Така че ние ще изглежда по най-няколко повтарящи се модели в една минута. 171 00:13:31,960 --> 00:13:42,300 Така че две неща трябва да имате предвид, когато използвате тези модел за съвпадение инструменти тук. 172 00:13:42,300 --> 00:13:52,120 Да предположим, че искаме да погледнем на ЗМ на "Abraham Lincoln прави сандвичи с шунка." 173 00:13:52,120 --> 00:13:55,230 Така че промяна името на Ейбрахам Линкълн на Авраам. 174 00:13:55,230 --> 00:14:00,290 И сега ние търсим това, което се връща от тази функция за търсене, 175 00:14:00,290 --> 00:14:03,270 и да го връща само шунка в този случай. 176 00:14:03,620 --> 00:14:08,080 И го прави това, защото търсенето просто естествено е на най-лявата опашката. 177 00:14:08,080 --> 00:14:12,130 И всички регулярни изрази, освен ако не сте задали друго, ще го направя. 178 00:14:12,830 --> 00:14:18,880 Ако искахме да се намери всичко там е функция за това - да намерите всичко. 179 00:14:18,880 --> 00:14:35,100 Така, че може просто да изглежда като всички = re.findall ("h.m", текст) 180 00:14:35,100 --> 00:14:44,540 и след това all.group (). 181 00:14:44,540 --> 00:14:51,040 All произвежда шунка и шунка, а в този случай и двете струни в Abraham всяка шунка. 182 00:14:51,610 --> 00:14:55,110 Така че това е друг вариант. 183 00:14:56,250 --> 00:15:06,940 >> Great. Другото нещо, което трябва да имате предвид е, че регулярните изрази вземе най-голямата интуитивно. 184 00:15:06,940 --> 00:15:09,520 Нека разгледаме този пример. 185 00:15:10,200 --> 00:15:16,070 Ние направихме, че най-лявата търсене тук, а след това се опитах по-голямо търсене 186 00:15:16,070 --> 00:15:18,800 използвате Kleene оператор звезда. 187 00:15:18,800 --> 00:15:24,180 Така че за "Abraham Lincoln прави сандвичи с шунка," и аз само се върна 188 00:15:24,180 --> 00:15:26,280 т като резултат. 189 00:15:26,280 --> 00:15:31,670 Причината за тази грешка беше, че е могла да вземе произволен брой 190 00:15:31,670 --> 00:15:36,140 Н е, защото аз не уточни нищо да отида в между Н и m. 191 00:15:36,140 --> 00:15:42,010 Единственият пример, че там имаше m - единствените примери там с m в него 192 00:15:42,010 --> 00:15:46,220 и произволен брой ч. Това е само низ т. 193 00:15:46,490 --> 00:15:51,850 Тогава аз се опитах отново; аз казах: "Добре, нека да получите действителната големина група тук." 194 00:15:51,850 --> 00:15:59,670 И след това, което направих часа. * M, така че просто се връща произволен брой знаци между Н и m. 195 00:16:00,280 --> 00:16:02,950 И ако са само началото и мисля, "О, добре, добре това ще 196 00:16:02,950 --> 00:16:11,560 да ме бута ", това всъщност се всичко от час в Abraham Lincoln 197 00:16:11,560 --> 00:16:13,690 по целия път до края на шунка. 198 00:16:14,040 --> 00:16:18,110 Той е алчен, той вижда ч - всичко това друг текст - m, 199 00:16:18,110 --> 00:16:21,280 и това е, какво е необходимо инча 200 00:16:22,060 --> 00:16:27,480 Това е особено нечуваното - това е функция, ние също може да 201 00:16:27,480 --> 00:16:30,670 зададени за не бъдете алчни Използване на други функции. 202 00:16:31,480 --> 00:16:34,490 Но това е нещо, което трябва да се има предвид особено 203 00:16:34,490 --> 00:16:38,720 при разглеждане на HTML текст, който е една от причините, че 204 00:16:38,720 --> 00:16:41,500 регулярни изрази са трудни за HTML. 205 00:16:42,460 --> 00:16:46,310 Защото, ако имате HTML отворен етикет и след това много неща в средата 206 00:16:46,310 --> 00:16:49,820 и след това друг HTML затворен етикет много по-късно в програмата, 207 00:16:49,820 --> 00:16:55,420 току-що сте изяде много HTML кода си вероятно по погрешка. 208 00:16:56,200 --> 00:17:01,840 >> Всички права - толкова повече специални символи, подобно на много други езици, 209 00:17:01,840 --> 00:17:04,780 ние избяга с помощта на наклонена черта. 210 00:17:04,780 --> 00:17:10,329 Така че ние можем да използваме точка, за да се използва всеки знак с изключение на нов ред. 211 00:17:10,329 --> 00:17:14,550 Ние можем да използваме бягство w да се уточни всеки буквен знак. 212 00:17:14,550 --> 00:17:20,329 И от г аналогия бягство за всяко цяло число - цифрово-буквен знак. 213 00:17:20,630 --> 00:17:27,440 Ние можем да определят - можем да използваме скоби да се уточни, свързани с изразяване. 214 00:17:27,440 --> 00:17:30,970 Така че това ще приеме, Б или В. 215 00:17:31,320 --> 00:17:37,000 И ние също така да зададете или възможностите за или б. 216 00:17:37,000 --> 00:17:41,110 Например - ако търсим множество възможности 217 00:17:41,110 --> 00:17:44,940 в скоби, можем да използваме или оператор, както в - 218 00:17:44,940 --> 00:17:52,480 така че нека да се върнем към този пример тук. 219 00:17:53,000 --> 00:17:59,790 А сега нека вземем - да се върнем към този пример тук, а след това 220 00:17:59,790 --> 00:18:12,290 вземат ад - така че това трябва да се върне - Предполагам, че това все още е Авраам. 221 00:18:12,290 --> 00:18:17,410 Така че това - ако правим всичко - страхотно. 222 00:18:17,410 --> 00:18:22,700 Така че нека да актуализира текста тук. 223 00:18:22,700 --> 00:18:34,690 "Авраам яде шунка, докато покашляне му -. Докато Хеминг" Great. 224 00:18:44,090 --> 00:18:47,330 All. Great. Сега ние се шунка, шунка, и подгъва. 225 00:18:48,510 --> 00:18:59,370 Докато Хеминг - докато тананикам с него - докато тананикам да го подгъва. Great. 226 00:19:00,350 --> 00:19:03,250 Същото нещо. 227 00:19:03,820 --> 00:19:09,180 Сега всичко се връща все още само шунка, шунка, и подгъва без вземане на бучене или на него. 228 00:19:09,940 --> 00:19:22,600 Great - и какво от това, ако искаме да разгледаме, че или - за да можем да направим освен това 229 00:19:23,510 --> 00:19:33,810 него - ще се върнем към това. 230 00:19:34,810 --> 00:19:45,760 Добре - така - добре - в позиции, можете да използвате и карета или знака за долар 231 00:19:45,760 --> 00:19:49,350 да се уточни, че търсите нещо в началото или в края на низ. 232 00:19:50,260 --> 00:19:52,260 Или началото или края на думата. 233 00:19:52,400 --> 00:19:54,470 Това е един от начините да го използват. 234 00:19:55,630 --> 00:20:01,160 >> Добре - така че нека си поиграете с малко по-голям блок от текст. 235 00:20:03,950 --> 00:20:08,310 Нека да кажем, този ред тук - това твърдение тук. 236 00:20:08,310 --> 00:20:11,360 Силата на регулярен израз е, че те могат да се определят моделите 237 00:20:11,360 --> 00:20:13,390 не само определени знаци. 238 00:20:14,900 --> 00:20:18,790 Нека направим - нека наречем това блок. 239 00:20:22,400 --> 00:20:27,110 След това ние ще прочетете всичко това инча 240 00:20:28,890 --> 00:20:50,820 И след това да има - нека направим всичко =, така че това, което някои неща, които бихме могли да търсят тук изгодно? 241 00:20:50,820 --> 00:20:54,070 Бихме могли да се огледа за изразяване ухо. 242 00:20:55,050 --> 00:21:01,520 Не е много интересно. Какво ще кажете за това? Ще видим какво ще стане. 243 00:21:03,710 --> 00:21:05,710 Дадох я проблем. 244 00:21:06,380 --> 00:21:10,750 Така че са много неща, преди отново и всичко останало. 245 00:21:10,750 --> 00:21:15,630 Така че трябва да се върне всичко от началото до всички повторно може би няколко пъти. 246 00:21:18,800 --> 00:21:21,970 И след това тук ние имаме силата на регулярните изрази е, че те 247 00:21:21,970 --> 00:21:24,900 да зададете модели не само на героите тук са. 248 00:21:24,900 --> 00:21:28,510 Така че по целия път до крайната повторно, тя започва с най-лявата и беше алчен. 249 00:21:30,710 --> 00:21:32,710 Нека да видим - какво друго може да очакваме. 250 00:21:32,710 --> 00:21:39,860 Предполагам, че едно нещо, ако имате интерес да търсят местоимения тя и той, 251 00:21:39,860 --> 00:21:44,600 можете да проверите за S е равна на 0 или 1 252 00:21:44,600 --> 00:21:49,710 и изразяването му, и че най-вероятно няма да се върне - 253 00:21:49,710 --> 00:21:58,020 О, предполагам, че той се върна, защото там ще се търсят в сила, този ден, тук са. 254 00:22:00,590 --> 00:22:06,270 Нека се опитаме уточни, че това трябва да излезе в началото на нещо. 255 00:22:06,640 --> 00:22:09,530 Нека да видим дали това отпада. 256 00:22:09,530 --> 00:22:19,630 Така че можем да направим, мазнини, и там не се получи нищо, защото тя и той 257 00:22:19,630 --> 00:22:22,870 не се срещат в тази фраза. 258 00:22:24,960 --> 00:22:30,410 Great. Добре - така че обратно на котка тук. 259 00:22:30,410 --> 00:22:35,720 Така сложни модели се наранява мозъка. 260 00:22:35,720 --> 00:22:40,500 Така че това е защо ние използваме регулярни изрази, за да се избегнат тези проблеми. 261 00:22:40,820 --> 00:22:43,520 >> Така че тук са някои други полезни видове можете да си поиграете с. 262 00:22:43,520 --> 00:22:50,290 Разгледахме търсене днес, но можете да използвате и мач, Сплит, findall и групи. 263 00:22:50,290 --> 00:22:53,970 Така други готини неща, които можете да направите с регулярни изрази освен просто 264 00:22:53,970 --> 00:22:58,870 търси модели е като модел и държи всички мачове - 265 00:22:58,870 --> 00:23:02,530 неговите променливи - и след това с помощта на тези в кода си по-късно. 266 00:23:02,850 --> 00:23:05,980 Това може да бъде много полезно. Други неща, които могат да бъдат преброяване. 267 00:23:05,980 --> 00:23:11,720 Така че можем да разчитаме на брой копия на един постоянен израз, 268 00:23:11,720 --> 00:23:13,960 и това е, което можем да използваме за групи. 269 00:23:13,960 --> 00:23:17,550 И другите видове, както също са възможни. 270 00:23:18,040 --> 00:23:22,980 Така че аз просто искам да поговорим малко повече за други начини, които можете да използвате регулярни изрази. 271 00:23:22,980 --> 00:23:29,100 >> Така един по-напреднал заявление е в размита съвпадение. 272 00:23:29,100 --> 00:23:33,450 Така че, ако търсите за текст за изразяване, Юлий Цезар, 273 00:23:33,450 --> 00:23:37,740 и ще се видим или Гай Юлий Цезар или името Юлий Цезар и на други езици, 274 00:23:37,740 --> 00:23:44,400 тогава може да искате да зададете някои тегло до тези стойности. 275 00:23:44,400 --> 00:23:48,930 И ако това е достатъчно близо - ако пресича определен праг - след това искате 276 00:23:48,930 --> 00:23:50,860 да бъде в състояние да приеме Юлий Цезар. 277 00:23:50,860 --> 00:24:00,580 Така че има няколко различни приложения за това в рамките на няколко други езици, както добре. 278 00:24:02,580 --> 00:24:08,420 Ето и някои други инструменти, Regex Пал - един удобен малък ап онлайн, за да 279 00:24:08,420 --> 00:24:12,190 Проверете дали регулярните изрази са съставени правилно. 280 00:24:12,190 --> 00:24:18,500 Има и самостоятелни инструменти, които могат да работят от компютъра си 281 00:24:18,500 --> 00:24:22,100 като Ultra Pico, и както само готварски книги. 282 00:24:22,100 --> 00:24:25,410 Така че, ако сте прави проект, който включва един тон на регулярни изрази 283 00:24:25,410 --> 00:24:29,810 това е може би мястото да отида извън обхвата на днес. 284 00:24:31,520 --> 00:24:35,770 И след това просто да ви даде усещане за това как е честотата му 285 00:24:35,770 --> 00:24:44,090 има Впиши в Unix, Perl има вградена и C има PCRE за C. 286 00:24:44,090 --> 00:24:48,890 И след всички тези други езици също имат редовни пакети експресия 287 00:24:48,890 --> 00:24:52,020 , които работят с по същество същата синтаксиса имаме вкус на днешния ден. 288 00:24:52,020 --> 00:24:54,790 PHP, Java, Ruby, и така нататък. 289 00:24:56,080 --> 00:24:58,980 >> Google Code Search е действително си струва да споменем, че е един от най- 290 00:24:58,980 --> 00:25:05,720 сравнително малко приложения там, че дава възможност на гражданите да имат достъп 291 00:25:05,720 --> 00:25:07,800 своята база данни с помощта на регулярни изрази. 292 00:25:07,800 --> 00:25:12,920 Така че, ако се вгледате в Google Code търсене можете да намерите код 293 00:25:12,920 --> 00:25:16,880 ако търсите пример за това как една функция може да се използва, 294 00:25:16,880 --> 00:25:21,610 можете да използвате регулярен израз, за ​​да намерите тази функция се използва в най-различни случаи. 295 00:25:21,610 --> 00:25:28,000 Можете да потърсите неуспешно, и след това можете да търсите за флага на запис или четене 296 00:25:28,000 --> 00:25:32,000 ако искаш пример за неуспешно се използва в този случай. 297 00:25:33,530 --> 00:25:37,010 Така че едно и също нещо там, и тук са някои препратки. 298 00:25:37,010 --> 00:25:40,990 Това ще бъде на разположение онлайн, както и, така че ще напред, ако 299 00:25:40,990 --> 00:25:45,560 искате да разгледате Python, Впиши, Perl - просто искате да получите някои вдъхновение 300 00:25:45,560 --> 00:25:50,650 или ако искате да изглежда по най-теорията тук са някои добри скача места. 301 00:25:50,650 --> 00:25:53,870 Благодаря Ви много. 302 00:25:58,470 --> 00:25:59,910 [CS50.TV]