1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Семінар: шаблоном з використанням регулярних виразів] 2 00:00:02,000 --> 00:00:04,000 [Джон Mussman-Гарвардський університет] 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 А потім від 2 до 4-х символів, щоб шукати. 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 шаблон, в якому у нас є дужки, потім 3 цифри, а потім закінчити дужках, 35 00:02:40,450 --> 00:02:44,070 Ще 3 номери, тире, 2 номери, а потім 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 і операція зірка Кліні, що ми побачимо через кілька хвилин. 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 яким я вірю, з червня 1, якщо ви хочете, щоб відсвяткувати це. 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 Так що ці 2 основні функції, які ми сьогодні і побачимо 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, а потім так м \ ж просто приймає будь-яку літеру в алфавітному порядку там. 134 00:10:21,850 --> 00:10:26,820 Так от ми шукаємо "H", а потім ще букви в алфавітному порядку 135 00:10:26,820 --> 00:10:30,060 м, а потім, так от, що буде відповідати шинкою 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 Інша справа, що ми можемо зробити, це використовувати нашу перед рядками тексту в Python. 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 І тоді наше вираз може бути година, а то й Я зроблю точка м. 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 Так що ж робити слід будь-яке число B - ви робите 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 AB? це слід 0 або 1 б. 167 00:13:09,190 --> 00:13:18,580 AB {N} є потім н В, а потім так далі. 168 00:13:18,580 --> 00:13:22,820 Якщо у вас є 2 числа в фігурних дужках ви вказуєте діапазон 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 Так що 2 речі, щоб мати на увазі при використанні цих інструментів шаблоном тут. 172 00:13:42,300 --> 00:13:52,120 Так що сказати, що ми хочемо подивитися на ТМ "Авраам Лінкольн робить бутерброди з шинкою". 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 Всі виробляє як шинка і шинку, і в цьому випадку обидва з рядків в кожній Авраама шинки. 182 00:14:51,610 --> 00:14:55,110 Так що це ще один варіант. 183 00:14:56,250 --> 00:15:06,940 >> Великий. Крім того, необхідно мати на увазі, що регулярні вирази взяти найбільшу інтуїтивно. 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 допомогою оператора Кліні зірки. 187 00:15:18,800 --> 00:15:24,180 Так що для "Авраам Лінкольн робить бутерброди з шинкою", і я тільки що повернувся 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 год тому, що я не уточнив, що-небудь, щоб пройти між год і т. 191 00:15:36,140 --> 00:15:42,010 Єдиний приклад, що там були м - єдині приклади там з м в ньому 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 І тоді я зробив годину. * М, так що просто повертає будь-яку кількість символів між год і т. 195 00:16:00,280 --> 00:16:02,950 І якщо ви тільки починаєте, і думав: "О, добре, добре це буде 196 00:16:02,950 --> 00:16:11,560 зрозумійте мене шинка, "насправді приймає все, від год Авраам Лінкольн 197 00:16:11,560 --> 00:16:13,690 аж до кінця шинки. 198 00:16:14,040 --> 00:16:18,110 Це жадібний, бачить год - все це інший текст - м, 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 І за аналогією втечу D для будь-якого цілого - чисельний характер. 213 00:17:20,630 --> 00:17:27,440 Ми можемо вказати - ми можемо використовувати дужки, щоб вказати пов'язаних виразів. 214 00:17:27,440 --> 00:17:30,970 Так що це буде прийняти A, B, або C. 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 прийняти AE - так що це повинно повернутися - я думаю, це ще Авраамові. 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 "Авраам їсть шинку в той час як його підшивати -. Підшивати в той час як" Великий. 224 00:18:44,090 --> 00:18:47,330 Все. Великий. Тепер ми отримуємо Шинка, шинка, і поділ. 225 00:18:48,510 --> 00:18:59,370 У той час як Хеммінг - у той час наспівувала йому - в той час наспівував поділ його. Великий. 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 Великий - так що, якщо ми хотіли подивитися, що або - так що ми могли б зробити 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 Так що повинні повернутися всі, від початку до всіх Re можливо пару разів. 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 Ви можете перевірити за рівним 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 Великий. Добре - Отже, повернемося до кішки тут. 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 Pal - зручне невеликий додаток онлайн 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 Ультра як Піко, і так само як тільки куховарських книг. 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 є GREP в Unix, Perl має вбудований, і С є 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 насправді варто згадати, це одна з 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 ви можете знайти код 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 Ви можете поглянути на FWRITE, а потім ви можете подивитися на прапор читання або запису 296 00:25:28,000 --> 00:25:32,000 Якщо ви хотіли приклад FWRITE використовуються в цьому випадку. 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, GREP, 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]