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]