1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Séminaire: la recherche de correspondances avec les expressions régulières] 2 00:00:02,000 --> 00:00:04,000 [Université John Mussman-Harvard] 3 00:00:04,000 --> 00:00:07,220 [C'est CS50.-CS50.TV] 4 00:00:07,780 --> 00:00:11,610 D'accord. Eh bien, bienvenue tout le monde. C'est CS50 2012. 5 00:00:11,780 --> 00:00:16,610 Mon nom est John, et je vais parler aujourd'hui sur les expressions régulières. 6 00:00:16,610 --> 00:00:22,530 Les expressions régulières est avant tout un outil, mais aussi parfois utilisés 7 00:00:22,530 --> 00:00:28,650 dans le code activement pour correspondre essentiellement des modèles et des chaînes. 8 00:00:28,650 --> 00:00:33,800 Alors, voici un comic web à partir de xkcd. 9 00:00:34,440 --> 00:00:42,370 Dans cette bande dessinée il ya un mystère assassiner où le tueur a 10 00:00:42,370 --> 00:00:47,860 puis quelqu'un en vacances, et les protagonistes doivent 11 00:00:47,860 --> 00:00:52,500 chercher dans 200 mégaoctets de courriels à la recherche d'une adresse. 12 00:00:52,500 --> 00:00:56,090 Et ils sont sur le point d'abandonner quand quelqu'un qui connaît les expressions régulières - 13 00:00:56,090 --> 00:01:00,550 probablement un super-héros - s'abat et écrit du code 14 00:01:00,550 --> 00:01:02,970 et résout le mystère assassiner. 15 00:01:02,970 --> 00:01:07,370 On peut donc supposer que ce sera quelque chose que vous serez habilité à le faire 16 00:01:07,370 --> 00:01:09,370 après ce séminaire. 17 00:01:09,370 --> 00:01:12,250 Nous allons nous contenter de fournir une introduction concise à la langue 18 00:01:12,250 --> 00:01:16,770 et vous donner suffisamment de moyens pour aller après plus de ressources sur votre propre. 19 00:01:17,680 --> 00:01:21,700 >> Alors expressions régulières semblent fondamentalement comme ça. 20 00:01:22,930 --> 00:01:25,550 Il s'agit d'une expression régulière dans Ruby. 21 00:01:25,550 --> 00:01:29,280 Il n'est pas très différente selon les langues. 22 00:01:29,690 --> 00:01:37,630 Nous avons juste à barres pour commencer et marquer l'expression régulière en Ruby. 23 00:01:37,630 --> 00:01:42,880 Et c'est une expression régulière à rechercher dans l'adresse modèle de courriel. 24 00:01:42,880 --> 00:01:49,160 Ainsi, nous voyons au premier bit cherche n'importe quel caractère alphanumérique. 25 00:01:50,500 --> 00:01:54,880 C'est parce que les adresses e-mail doivent souvent commencer par un caractère alphabétique. 26 00:01:55,460 --> 00:01:59,330 Et puis un caractère spécial suivi par le symbole @. 27 00:01:59,330 --> 00:02:03,260 Et puis la même chose pour le nom de domaine. 28 00:02:03,260 --> 00:02:10,030 Et puis entre 2 et 4 caractères pour chercher le. Com,. Net, et ainsi de suite. 29 00:02:10,850 --> 00:02:13,200 Voilà donc un autre exemple de l'expression régulière. 30 00:02:13,200 --> 00:02:17,270 Alors expressions régulières sont des protocoles pour trouver des motifs dans le texte. 31 00:02:17,270 --> 00:02:21,130 Ils font des comparaisons, sélections, et de remplacements. 32 00:02:21,690 --> 00:02:27,970 Ainsi, un troisième exemple est de trouver tous les numéros de téléphone se terminant par 54 dans un répertoire. 33 00:02:27,970 --> 00:02:34,360 Donc, avant que David déchire le répertoire CS50 nous pourrions rechercher 34 00:02:34,360 --> 00:02:40,450 un modèle où nous avons parenthèses puis 3 chiffres puis s'arrête parenthèse, 35 00:02:40,450 --> 00:02:44,070 3 autres numéros, un tiret, 2 numéros, puis 54. 36 00:02:44,070 --> 00:02:48,310 Et ce serait essentiellement comment nous arrivons à une expression régulière à rechercher pour cela. 37 00:02:49,150 --> 00:02:52,960 >> Donc, il ya - nous avons fait certaines choses dans CS50 qui sont un peu comme 38 00:02:52,960 --> 00:02:59,740 expressions régulières, etc - par exemple - dans le fichier dictionary.C 39 00:02:59,740 --> 00:03:04,720 pour la vérification orthographique ensemble des problèmes que vous avez utilisé fscanf 40 00:03:04,720 --> 00:03:07,930 à lire en un mot du dictionnaire. 41 00:03:07,930 --> 00:03:16,240 Et vous pouvez voir le pourcentage 45s est à la recherche d'une chaîne de 45 caractères. 42 00:03:16,240 --> 00:03:20,020 Donc, c'est un peu comme une expression régulière rudimentaire. 43 00:03:21,150 --> 00:03:26,060 Et vous pouvez avoir toutes les 45 caractères qui correspondent au projet de loi en y 44 00:03:26,060 --> 00:03:28,080 et choisir celles vers le haut. 45 00:03:28,080 --> 00:03:33,480 Et puis le deuxième exemple le problème de programmation web les plus récents 46 00:03:33,480 --> 00:03:40,760 fixé dans le code de distribution pour php nous avons en fait une expression régulière simple. 47 00:03:40,760 --> 00:03:46,790 Et celui-ci est tout simplement à la recherche pour vérifier si la page Web qui est passé dans 48 00:03:46,790 --> 00:03:51,940 correspond soit vous connecter ou se déconnecter de vous inscrire. PHP. 49 00:03:52,220 --> 00:03:57,910 Et puis retourner vrai ou faux en fonction de cette correspondance d'expression régulière. 50 00:03:59,400 --> 00:04:01,740 >> Ainsi, lorsque vous utilisez l'expression régulière? 51 00:04:01,740 --> 00:04:04,820 Pourquoi êtes-vous ici aujourd'hui? 52 00:04:05,330 --> 00:04:08,480 Donc, vous ne voulez pas utiliser l'expression régulière quand il ya quelque chose qui 53 00:04:08,480 --> 00:04:11,640 fait le travail pour vous encore plus facilement. 54 00:04:11,640 --> 00:04:15,510 Donc, XML et HTML sont en fait assez difficile 55 00:04:15,510 --> 00:04:18,480 d'écrire des expressions régulières pour que nous verrons dans un peu. 56 00:04:19,110 --> 00:04:23,280 Donc, il ya des analyseurs dédiés pour ces langues. 57 00:04:24,170 --> 00:04:30,060 Vous devez également être en accord avec le compromis du commerce et de l'exactitude fréquemment. 58 00:04:30,060 --> 00:04:36,220 Si vous essayez - si nous avons vu une expression régulière pour une adresse e-mail, 59 00:04:37,370 --> 00:04:42,590 mais dites que vous vouliez une adresse électronique spécifique et peu à peu l' 60 00:04:42,590 --> 00:04:48,570 expression régulière peut devenir plus complexe car il est devenu plus précis. 61 00:04:49,580 --> 00:04:52,260 Donc, ce serait un compromis. 62 00:04:52,260 --> 00:04:55,330 Vous devez être sûr que vous êtes bien faites avec l'expression régulière. 63 00:04:55,330 --> 00:04:57,920 Si vous savez exactement ce que vous cherchez, il serait plus logique 64 00:04:57,920 --> 00:05:02,070 à mettre dans le temps et d'écrire un analyseur plus efficace. 65 00:05:02,070 --> 00:05:06,980 Et enfin il ya un problème historique avec la régularité 66 00:05:06,980 --> 00:05:08,940 des expressions et des langues. 67 00:05:08,940 --> 00:05:12,960 Les expressions régulières sont en réalité beaucoup plus puissant que 68 00:05:12,960 --> 00:05:16,450 expressions régulières par dire dans un sens formel. 69 00:05:17,130 --> 00:05:20,150 >> Donc, je ne veux pas aller trop loin dans la théorie formelle, 70 00:05:20,150 --> 00:05:24,000 mais la plupart des langues que l'on code en fait ne sont pas régulières. 71 00:05:24,000 --> 00:05:29,110 Et c'est pourquoi les expressions régulières ne sont pas toujours considérés comme tout ce qui sécurisé. 72 00:05:29,670 --> 00:05:33,150 Donc, fondamentalement, il ya une hiérarchie de Chomsky pour les langues, 73 00:05:33,150 --> 00:05:38,400 et les expressions régulières sont construites à l'aide de l'union, la concaténation, 74 00:05:38,400 --> 00:05:41,810 et l'opération Kleene étoile que nous verrons dans quelques minutes. 75 00:05:43,130 --> 00:05:48,860 Si vous êtes intéressé en théorie il est tout à fait beaucoup de choses là-bas sous le capot. 76 00:05:50,360 --> 00:05:55,880 >> Ainsi, un bref historique - juste pour le contexte ici - ensembles réguliers venus 77 00:05:55,880 --> 00:05:59,580 dans les années 1950, puis nous avons eu éditeurs simples que 78 00:05:59,580 --> 00:06:03,300 incorporé des expressions régulières - recherche juste pour les chaînes. 79 00:06:03,570 --> 00:06:09,110 Grep - qui est un outil de ligne de commande - était l'un des premiers 80 00:06:09,110 --> 00:06:14,160 outils très populaire qui a incorporé des expressions régulières dans les années 1960. 81 00:06:14,160 --> 00:06:20,560 Dans les années 80, Perl a été construit - est un langage de programmation qui 82 00:06:20,560 --> 00:06:24,110 intègre des expressions régulières en très bonne place. 83 00:06:24,550 --> 00:06:30,130 Et puis, plus récemment, nous avons eu Perl Compatible Regular Expression 84 00:06:30,130 --> 00:06:35,870 protocoles essentiellement dans d'autres langues qui utilisent une grande partie de la même syntaxe. 85 00:06:36,630 --> 00:06:39,840 Bien sûr, l'événement le plus important a été en 2008 86 00:06:39,840 --> 00:06:43,040 où il y avait la première Journée nationale des expressions régulières, 87 00:06:43,040 --> 00:06:47,350 qui je crois est le 1 Juin, si vous voulez fêter ça. 88 00:06:48,430 --> 00:06:50,840 >> Encore une fois, juste un peu plus de théorie ici. 89 00:06:52,180 --> 00:06:55,320 Donc, il ya deux manières différentes de construire des expressions régulières. 90 00:06:55,950 --> 00:07:02,050 Une méthode simple consiste à construire l'expression que vous allez 91 00:07:02,050 --> 00:07:07,500 fonctionner sur la chaîne interpréter - essentiellement construire un mini-programme peu que 92 00:07:07,500 --> 00:07:11,870 analysera les pièces d'un string et de voir: «Oh, cela correspond à l'expression régulière ou non?" 93 00:07:12,250 --> 00:07:14,250 Et puis exécuter cela. 94 00:07:14,250 --> 00:07:17,300 Donc si vous avez une très petite expression régulière, c'est probablement 95 00:07:17,300 --> 00:07:19,380 le moyen le plus efficace de le faire. 96 00:07:20,090 --> 00:07:25,420 Et puis, si vous - une autre option est de garder la reconstruction de l' 97 00:07:25,420 --> 00:07:30,260 expression que vous alliez, et que la possibilité de simuler. 98 00:07:30,440 --> 00:07:37,690 Et ces premières tentatives d'algorithmes d'expressions régulières étaient 99 00:07:37,690 --> 00:07:44,330 relativement simple et relativement rapide, mais n'a pas eu beaucoup de souplesse. 100 00:07:44,330 --> 00:07:47,500 Alors, pour faire encore quelques-unes des choses que nous allons examiner 101 00:07:47,500 --> 00:07:52,860 Aujourd'hui, nous avons eu à faire expression régulière plus complexe 102 00:07:52,860 --> 00:07:56,650 implémentations qui sont potentiellement beaucoup plus lent, de sorte que c'est quelque chose à garder à l'esprit 103 00:07:57,510 --> 00:08:02,920 Il ya aussi un déni expressions régulières de la variété d'attaque 104 00:08:02,920 --> 00:08:08,330 que d'exploiter le potentiel de ces nouvelles implémentations d' 105 00:08:08,330 --> 00:08:10,930 expressions régulières pour devenir très complexe. 106 00:08:11,570 --> 00:08:15,650 Et dans la même logique que nous avons vu dans les attaques de dépassement de tampon, 107 00:08:15,650 --> 00:08:21,610 vous avez des attaques que le travail en faisant des boucles récursives 108 00:08:21,610 --> 00:08:24,400 dépassement de la capacité de la mémoire. 109 00:08:24,780 --> 00:08:29,540 Et en passant Regexen est l'un des pluriels officielles de l'expression régulière 110 00:08:29,540 --> 00:08:32,890 par analogie à bœufs dans les pays anglo-saxons. 111 00:08:33,500 --> 00:08:40,169 >> Bon, alors la bibliothèque Python beaucoup d'entre vous ici en personne ont Macs, 112 00:08:40,169 --> 00:08:43,860 de sorte que vous pouvez réellement tirer de cette place sur votre écran. 113 00:08:43,860 --> 00:08:47,480 Les expressions régulières sont construites en Python. 114 00:08:48,070 --> 00:08:53,020 Et si Python est préchargé sur Mac et également disponible en ligne sur ce lien. 115 00:08:53,770 --> 00:08:57,350 Donc, si vous regardez vous pouvez mettre en pause et assurez-vous que Python 116 00:08:58,080 --> 00:09:00,170 que nous jouons ici. 117 00:09:00,780 --> 00:09:06,420 Il s'agit d'un manuel en ligne, donc si vous tapez simplement Python dans votre ordinateur 118 00:09:06,420 --> 00:09:10,500 vous verrez que la version arrive dans le terminal. 119 00:09:11,070 --> 00:09:17,720 Donc j'ai fourni un lien vers le manuel pour la version 2 de Python, ainsi qu'une feuille de triche. 120 00:09:17,720 --> 00:09:23,100 Il existe une version 3 de Python, mais votre Mac n'a pas nécessairement 121 00:09:23,100 --> 00:09:25,130 venir avec qui préchargé. 122 00:09:25,130 --> 00:09:27,360 Donc, pas très différent. 123 00:09:27,360 --> 00:09:33,270 Ok, donc quelques notions de base de l'utilisation des expressions régulières dans Python. 124 00:09:34,080 --> 00:09:42,650 >> Donc ici j'ai utilisé une expression très simple, donc je n'ai Python import re 125 00:09:43,750 --> 00:09:47,070 puis a pris la suite de re.search. 126 00:09:47,070 --> 00:09:49,910 Et la recherche prend 2 arguments. 127 00:09:49,910 --> 00:09:56,040 Le premier est l'expression régulière, et le second est le texte 128 00:09:56,040 --> 00:09:58,290 ou la chaîne que vous souhaitez analyser. 129 00:09:58,290 --> 00:10:01,210 Et puis j'ai imprimé le result.group. 130 00:10:01,580 --> 00:10:05,860 Ce sont donc les 2 fonctions de base que nous allons voir aujourd'hui 131 00:10:06,790 --> 00:10:10,170 en apprendre davantage sur les expressions régulières. 132 00:10:10,170 --> 00:10:12,880 Il suffit donc de briser cette expression régulière ici 133 00:10:12,880 --> 00:10:21,770 h, puis \ w puis m si \ w accepte n'importe quel caractère alphabétique à l'intérieur. 134 00:10:21,850 --> 00:10:26,820 Donc, ici, nous sommes à la recherche d'un "h" et puis un autre caractère alphabétique 135 00:10:26,820 --> 00:10:30,060 et puis m, alors voici qui correspondrait à jambon 136 00:10:30,060 --> 00:10:34,480 In "Abraham Lincoln et sandwiches au jambon." 137 00:10:35,040 --> 00:10:37,150 C'est le résultat de ce groupe. 138 00:10:37,680 --> 00:10:43,130 Une autre chose que nous pouvons faire, c'est utiliser nos chaînes avant de texte en Python. 139 00:10:43,130 --> 00:10:46,220 Donc je suppose que je vais aller de l'avant et tirer que vers le haut ici. 140 00:10:46,220 --> 00:10:49,210 Python import re. 141 00:10:50,070 --> 00:10:54,000 Et si je devais faire la même chose - disons texte est, 142 00:10:55,390 --> 00:11:00,800 «Abraham», laissez-nous zoomer - là nous allons. 143 00:11:01,610 --> 00:11:06,430 Le texte est: «Abraham mange du jambon." 144 00:11:07,460 --> 00:11:15,260 Bon, et puis entraîner = re.search. 145 00:11:16,260 --> 00:11:22,020 Et puis notre expression peut être h, puis je ferai dot m. 146 00:11:22,020 --> 00:11:26,280 Alors dot prend n'importe quel caractère qui n'est pas une nouvelle ligne y compris les numéros, 147 00:11:26,280 --> 00:11:28,650 signes de pourcentage, quelque chose comme ça. 148 00:11:28,650 --> 00:11:38,030 Et puis le texte - boum - puis-result.group-yeah. 149 00:11:38,030 --> 00:11:41,820 Donc, c'est juste la façon de mettre en œuvre des fonctionnalités de base ici. 150 00:11:42,300 --> 00:11:55,110 Si nous avions un anneau de texte - ce texte fou - inclus dire beaucoup de barres obliques inversées 151 00:11:55,110 --> 00:12:01,180 et cordes à l'intérieur et les choses qui pourraient ressembler à des séquences d'échappement, 152 00:12:01,180 --> 00:12:08,480 alors nous voulons probablement d'utiliser l'entrée de texte brut pour s'assurer qui est acceptée. 153 00:12:08,480 --> 00:12:14,120 Et qui ressemble à ça. 154 00:12:14,120 --> 00:12:17,810 Donc, si nous étions à la recherche pour chacun d'entre eux là-bas, nous ne devrions pas trouver quoi que ce soit. 155 00:12:19,070 --> 00:12:21,680 Mais c'est la façon dont vous souhaitez mettre en œuvre; juste avant la chaîne de 156 00:12:21,680 --> 00:12:24,990 l'expression régulière que vous mettez la lettre r. 157 00:12:26,150 --> 00:12:30,260 >> Ok, donc nous continuons. 158 00:12:30,260 --> 00:12:33,730 Tout droit - alors penchons-nous sur quelques motifs répétitifs ici. 159 00:12:34,750 --> 00:12:39,150 Donc, une chose que vous voulez faire est de répéter les choses 160 00:12:40,040 --> 00:12:42,480 que vous êtes à la recherche à travers le texte. 161 00:12:42,480 --> 00:12:48,300 Donc, pour faire un suivi par un nombre quelconque de b - vous faites ab *. 162 00:12:48,630 --> 00:12:51,620 Et puis il ya une série d'autres règles trop. 163 00:12:51,620 --> 00:12:54,380 Et vous pouvez regarder tous ces up, je vais courir à travers quelques-uns des 164 00:12:54,380 --> 00:12:57,630 les plus couramment utilisés. 165 00:12:57,630 --> 00:13:03,920 Donc ab + est un suivi de n'importe quel N supérieur à 0 de b. 166 00:13:04,510 --> 00:13:08,000 ab? est suivi par un 0 ou 1 de b. 167 00:13:09,190 --> 00:13:18,580 ab {N} est un suivi d'au N de B, puis ainsi de suite. 168 00:13:18,580 --> 00:13:22,820 Si vous avez 2 numéros dans les accolades vous spécifiez une plage 169 00:13:23,300 --> 00:13:25,440 qui peut être éventuellement appariés. 170 00:13:26,390 --> 00:13:30,420 Nous allons donc examiner de plus près quelques motifs répétitifs dans une minute. 171 00:13:31,960 --> 00:13:42,300 Donc, 2 choses à garder à l'esprit lors de l'utilisation de ces outils motif assortie ici. 172 00:13:42,300 --> 00:13:52,120 Donc disons que nous voulons regarder le hm de "Abraham Lincoln fait des sandwichs au jambon." 173 00:13:52,120 --> 00:13:55,230 J'ai donc changé le nom d'Abraham Lincoln à Abraham. 174 00:13:55,230 --> 00:14:00,290 Et maintenant, nous sommes à la recherche pour ce qui est retourné par cette fonction de recherche, 175 00:14:00,290 --> 00:14:03,270 et il ne revient jambon dans ce cas. 176 00:14:03,620 --> 00:14:08,080 Et il le fait parce que recherche tout prend naturellement la plus à gauche file d'attente. 177 00:14:08,080 --> 00:14:12,130 Et toutes les expressions régulières, sauf indication contraire vont le faire. 178 00:14:12,830 --> 00:14:18,880 Si nous voulions trouver tout ce qu'il ya une fonction pour cela - vous trouverez tout. 179 00:14:18,880 --> 00:14:35,100 Alors, qui pourrait tout ressembler à tous = re.findall ('h.m », texte) 180 00:14:35,100 --> 00:14:44,540 puis all.group (). 181 00:14:44,540 --> 00:14:51,040 Tout produit à la fois jambon et le jambon; dans ce cas, les deux chaînes dans chaque Abraham jambon. 182 00:14:51,610 --> 00:14:55,110 Voilà donc une autre option. 183 00:14:56,250 --> 00:15:06,940 >> Grande. L'autre chose à garder à l'esprit est que les expressions régulières prennent le plus intuitivement. 184 00:15:06,940 --> 00:15:09,520 Penchons-nous sur cet exemple. 185 00:15:10,200 --> 00:15:16,070 Nous l'avons fait plus à gauche recherche ici, et puis j'ai tenté une recherche plus 186 00:15:16,070 --> 00:15:18,800 utilisant l'opérateur de Kleene étoiles. 187 00:15:18,800 --> 00:15:24,180 Donc pour "Abraham Lincoln fait des sandwichs au jambon," et je ne revint 188 00:15:24,180 --> 00:15:26,280 m à la suite. 189 00:15:26,280 --> 00:15:31,670 La raison de cette erreur, c'est que j'aurais pu prendre n'importe quel nombre d' 190 00:15:31,670 --> 00:15:36,140 h c'est parce que je n'ai pas précisé quoi que ce soit pour aller entre h et m. 191 00:15:36,140 --> 00:15:42,010 Le seul exemple qui il avait m - les seuls exemples là-bas avec m en elle 192 00:15:42,010 --> 00:15:46,220 et un certain nombre d'heures de la chaîne étaient juste m. 193 00:15:46,490 --> 00:15:51,850 Ensuite, j'ai essayé à nouveau, j'ai dit: «Bon, nous obtenons le groupe réel plus ici." 194 00:15:51,850 --> 00:15:59,670 Et puis je l'ai h. * M, de sorte que retourne n'importe quel nombre de caractères entre h et m. 195 00:16:00,280 --> 00:16:02,950 Et si vous êtes débutant et de penser, "Oh, d'accord, eh bien ce sera 196 00:16:02,950 --> 00:16:11,560 vous méprenez jambon, «il faut vraiment tout de l'h à Abraham Lincoln 197 00:16:11,560 --> 00:16:13,690 sur toute la hauteur à la fin de jambon. 198 00:16:14,040 --> 00:16:18,110 Elle est gourmande, elle voit h - tout cela autre texte - m, 199 00:16:18,110 --> 00:16:21,280 et c'est ce qu'il faut po 200 00:16:22,060 --> 00:16:27,480 Cela est particulièrement flagrant - c'est une caractéristique que nous pouvons également 201 00:16:27,480 --> 00:16:30,670 préciser pour qu'il ne soit pas gourmand en utilisant d'autres fonctions. 202 00:16:31,480 --> 00:16:34,490 Mais c'est quelque chose que nous devons garder à l'esprit en particulier 203 00:16:34,490 --> 00:16:38,720 quand on regarde texte HTML, ce qui est une des raisons qui 204 00:16:38,720 --> 00:16:41,500 les expressions régulières sont difficiles pour HTML. 205 00:16:42,460 --> 00:16:46,310 Parce que si vous avez une balise HTML sont ouverts et puis beaucoup de choses dans le milieu 206 00:16:46,310 --> 00:16:49,820 et puis un autre tag HTML fermé beaucoup plus tard dans le programme, 207 00:16:49,820 --> 00:16:55,420 vous avez juste mangé beaucoup de votre code HTML peut-être par erreur. 208 00:16:56,200 --> 00:17:01,840 >> Tous droits - personnages si plus spéciales, comme beaucoup d'autres langues, 209 00:17:01,840 --> 00:17:04,780 nous échappons à l'aide de la barre. 210 00:17:04,780 --> 00:17:10,329 Ainsi, nous pouvons utiliser la dot pour spécifier n'importe quel caractère sauf pour une nouvelle ligne. 211 00:17:10,329 --> 00:17:14,550 Nous pouvons utiliser l'évasion w pour spécifier n'importe quel caractère alphabétique. 212 00:17:14,550 --> 00:17:20,329 Et par analogie évasion d pour tout entier - caractère numérique. 213 00:17:20,630 --> 00:17:27,440 Nous pouvons préciser - que nous pouvons utiliser des parenthèses pour spécifier expressions apparentées. 214 00:17:27,440 --> 00:17:30,970 Donc, ce serait accepter a, b, c. 215 00:17:31,320 --> 00:17:37,000 Et nous pouvons également préciser ou options pour a ou b. 216 00:17:37,000 --> 00:17:41,110 Par exemple - si nous étions à la recherche pour de multiples possibilités 217 00:17:41,110 --> 00:17:44,940 entre parenthèses, nous pourrions utiliser l'opérateur ou comme dans - 218 00:17:44,940 --> 00:17:52,480 donc revenons à cet exemple ici. 219 00:17:53,000 --> 00:17:59,790 Et maintenant, prenons - Revenons à notre exemple ici, puis 220 00:17:59,790 --> 00:18:12,290 prendre ae - ce qui devrait revenir - je suppose que c'est encore Abraham. 221 00:18:12,290 --> 00:18:17,410 Donc ceci - si nous le faisons tous - grand. 222 00:18:17,410 --> 00:18:22,700 Alors laissez-nous actualiser le texte ici. 223 00:18:22,700 --> 00:18:34,690 "Abraham mange du jambon, tout ourler son - tout ourlets." Grande. 224 00:18:44,090 --> 00:18:47,330 Toutes les. Grande. Maintenant, nous arrivons au jambon, jambon, et à l'ourlet. 225 00:18:48,510 --> 00:18:59,370 Alors ourlets - tout en fredonnant pour lui - tout en fredonnant à l'ourlet lui. Grande. 226 00:19:00,350 --> 00:19:03,250 C'est la même chose. 227 00:19:03,820 --> 00:19:09,180 Maintenant, tout retourne toujours juste, jambon et ourlet sans décrocher le bourdonnement ou le lui. 228 00:19:09,940 --> 00:19:22,600 Grande - tant pis si nous voulions regarder non plus que - si nous pouvions aussi faire 229 00:19:23,510 --> 00:19:33,810 lui ou - nous reviendrons à cela. 230 00:19:34,810 --> 00:19:45,760 Ok - donc - tout droit - dans des positions que vous pouvez également utiliser le curseur ou le signe dollar 231 00:19:45,760 --> 00:19:49,350 pour indiquer que vous êtes à la recherche de quelque chose au début ou à la fin d'une chaîne. 232 00:19:50,260 --> 00:19:52,260 Ou le début ou la fin d'un mot. 233 00:19:52,400 --> 00:19:54,470 C'est une façon de l'utiliser. 234 00:19:55,630 --> 00:20:01,160 >> Okay - laissez-nous jouer avec un peu plus grand bloc de texte. 235 00:20:03,950 --> 00:20:08,310 Disons cette ligne ici - cette déclaration ici. 236 00:20:08,310 --> 00:20:11,360 La puissance de l'expression régulière, c'est qu'ils peuvent spécifier des modèles 237 00:20:11,360 --> 00:20:13,390 pas seulement fixé caractères. 238 00:20:14,900 --> 00:20:18,790 Faisons - nous appelons ce bloc. 239 00:20:22,400 --> 00:20:27,110 Ensuite, nous allons lire tout cela po 240 00:20:28,890 --> 00:20:50,820 Et puis avoir un - nous faisons tous =; donc quelles sont les choses que nous pourrions rechercher ici rentable? 241 00:20:50,820 --> 00:20:54,070 Nous pourrions chercher l'oreille d'expression. 242 00:20:55,050 --> 00:21:01,520 Pas très intéressant. Que diriez-vous cela? Nous allons voir ce qui se passe. 243 00:21:03,710 --> 00:21:05,710 Je lui ai donné un problème. 244 00:21:06,380 --> 00:21:10,750 Donc, un certain nombre de choses avant de les remettre tous. 245 00:21:10,750 --> 00:21:15,630 Alors qu'il devrait tout depuis le début jusqu'à tout ré Peut-être une fois en couple retourner. 246 00:21:18,800 --> 00:21:21,970 Et puis nous avons ici la puissance des expressions régulières, c'est qu'ils 247 00:21:21,970 --> 00:21:24,900 peut spécifier des modèles non seulement personnages sont ici. 248 00:21:24,900 --> 00:21:28,510 Donc, tout le chemin jusqu'à la finale re, il a commencé avec le plus à gauche et était avide. 249 00:21:30,710 --> 00:21:32,710 Voyons - quoi d'autre pourrions-nous chercher. 250 00:21:32,710 --> 00:21:39,860 Je pense une chose si vous étiez intéressé à regarder pour les pronoms elle et lui, 251 00:21:39,860 --> 00:21:44,600 vous pouvez vérifier pour s étant égal à 0 ou 1 252 00:21:44,600 --> 00:21:49,710 et l'expression lui, et qui ne va probablement pas à revenir - 253 00:21:49,710 --> 00:21:58,020 oh, je suppose qu'il est revenu, il parce qu'il nous étudions la puissance, ce jour-là, voici. 254 00:22:00,590 --> 00:22:06,270 Essayons de préciser que cela doit se faire au début de quelque chose. 255 00:22:06,640 --> 00:22:09,530 Voyons si cela tombe. 256 00:22:09,530 --> 00:22:19,630 Ainsi, nous pouvons faire la graisse, et il nous n'obtenons rien, car elle et lui 257 00:22:19,630 --> 00:22:22,870 ne se produisent pas dans cette phrase. 258 00:22:24,960 --> 00:22:30,410 Grande. Ok - donc retour au chat ici. 259 00:22:30,410 --> 00:22:35,720 Alors modèles complexes est mal au cerveau. 260 00:22:35,720 --> 00:22:40,500 Donc, c'est pourquoi nous utilisons des expressions régulières pour éviter ces problèmes. 261 00:22:40,820 --> 00:22:43,520 >> Alors, voici quelques autres modes utiles que vous pouvez jouer avec. 262 00:22:43,520 --> 00:22:50,290 Nous avons regardé recherche aujourd'hui, mais vous pouvez également utiliser correspondance, split, findall et groupes. 263 00:22:50,290 --> 00:22:53,970 Ainsi, d'autres choses cool que vous pouvez faire avec les expressions régulières mais pas seulement 264 00:22:53,970 --> 00:22:58,870 la recherche de modèles est de prendre un modèle et la tenue tous les matchs - 265 00:22:58,870 --> 00:23:02,530 ses variables - et utiliser ceux dans votre code plus tard. 266 00:23:02,850 --> 00:23:05,980 Cela peut être très utile. D'autres choses pourraient compter. 267 00:23:05,980 --> 00:23:11,720 Ainsi, nous pouvons compter le nombre d'occurrences d'un modèle d'expression régulière, 268 00:23:11,720 --> 00:23:13,960 et c'est ce que nous pouvons utiliser pour les groupes. 269 00:23:13,960 --> 00:23:17,550 Et d'autres modes ainsi sont également possibles. 270 00:23:18,040 --> 00:23:22,980 Donc, je veux juste parler un peu plus sur d'autres façons que vous pouvez utiliser des expressions régulières. 271 00:23:22,980 --> 00:23:29,100 >> Donc, une application plus avancé est en correspondance floue. 272 00:23:29,100 --> 00:23:33,450 Donc, si vous êtes à la recherche d'un texte pour l'expression, Jules César, 273 00:23:33,450 --> 00:23:37,740 et vous voyez soit Gaius Julius Caesar ou le nom de Jules César dans d'autres langues, 274 00:23:37,740 --> 00:23:44,400 alors vous pouvez également attribuer un certain poids à ces valeurs. 275 00:23:44,400 --> 00:23:48,930 Et si elle est assez proche - si elle traverse un certain seuil - alors vous voulez 276 00:23:48,930 --> 00:23:50,860 pour être en mesure d'accepter Jules César. 277 00:23:50,860 --> 00:24:00,580 Donc, il ya un couple de différentes implémentations pour que dans quelques autres langues. 278 00:24:02,580 --> 00:24:08,420 Voici quelques autres outils, Regex PAL - un peu soft très pratique en ligne pour 279 00:24:08,420 --> 00:24:12,190 vérifier si vos expressions régulières sont composées correctement. 280 00:24:12,190 --> 00:24:18,500 Il existe également des outils autonomes que vous pouvez exécuter à partir de votre ordinateur de bureau 281 00:24:18,500 --> 00:24:22,100 comme Pico Ultra, et ainsi que des livres de recettes seulement. 282 00:24:22,100 --> 00:24:25,410 Donc, si vous faites un projet qui implique une tonne d'expressions régulières 283 00:24:25,410 --> 00:24:29,810 c'est probablement l'endroit où aller en dehors du champ d'aujourd'hui. 284 00:24:31,520 --> 00:24:35,770 Et puis, juste pour vous donner une idée de combien il est courant 285 00:24:35,770 --> 00:24:44,090 il ya grep sous Unix, Perl a built-in, et C, il est PCRE pour C. 286 00:24:44,090 --> 00:24:48,890 Et puis toutes ces autres langues ont également des forfaits d'expressions régulières 287 00:24:48,890 --> 00:24:52,020 qui fonctionnent avec essentiellement la même syntaxe que nous avons eu un avant-goût d'aujourd'hui. 288 00:24:52,020 --> 00:24:54,790 PHP, Java, Ruby, et ainsi de suite. 289 00:24:56,080 --> 00:24:58,980 >> Google Recherche de code est en fait digne de mention, il est l'un des 290 00:24:58,980 --> 00:25:05,720 relativement peu d'applications là-bas qui permet au public d'accéder 291 00:25:05,720 --> 00:25:07,800 sa base de données en utilisant des expressions régulières. 292 00:25:07,800 --> 00:25:12,920 Donc, si vous regardez sur Google Recherche de code, vous pouvez trouver le code 293 00:25:12,920 --> 00:25:16,880 Si vous cherchez un exemple de comment une fonction peut être utilisée, 294 00:25:16,880 --> 00:25:21,610 vous pouvez utiliser une expression régulière pour trouver cette fonction étant utilisé dans toutes sortes de cas. 295 00:25:21,610 --> 00:25:28,000 Vous pouvez chercher fwrite, et puis vous pouvez chercher le drapeau de l'écriture ou de lecture 296 00:25:28,000 --> 00:25:32,000 si vous voulez un exemple de fwrite être utilisé dans ce cas. 297 00:25:33,530 --> 00:25:37,010 Donc la même chose là-bas, et voici quelques références. 298 00:25:37,010 --> 00:25:40,990 Ce sera disponible en ligne aussi, donc aller en avant si 299 00:25:40,990 --> 00:25:45,560 vous voulez regarder Python, grep, Perl - vous voulez juste avoir un peu d'inspiration 300 00:25:45,560 --> 00:25:50,650 ou si vous voulez regarder de plus à la théorie Voici quelques bonnes tremplin endroits. 301 00:25:50,650 --> 00:25:53,870 Je vous remercie beaucoup. 302 00:25:58,470 --> 00:25:59,910 [CS50.TV]