1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Seminar: Pattern Matching mit regulären Ausdrücken] 2 00:00:02,000 --> 00:00:04,000 [John Mussman-Harvard University] 3 00:00:04,000 --> 00:00:07,220 [Dies ist CS50.-CS50.TV] 4 00:00:07,780 --> 00:00:11,610 Okay. Nun, jeder willkommen. Dies ist CS50 Jahr 2012. 5 00:00:11,780 --> 00:00:16,610 Mein Name ist John, und ich werde reden heute über reguläre Ausdrücke. 6 00:00:16,610 --> 00:00:22,530 Reguläre Ausdrücke ist in erster Linie ein Werkzeug, aber auch manchmal verwendet, 7 00:00:22,530 --> 00:00:28,650 im Code aktiv im Wesentlichen übereinstimmen Muster und Streichern. 8 00:00:28,650 --> 00:00:33,800 Also hier ist ein Web-Comic von xkcd. 9 00:00:34,440 --> 00:00:42,370 In diesem Comic gibt es ein Krimi, wo der Mörder hat 10 00:00:42,370 --> 00:00:47,860 gefolgt jemand im Urlaub, und die Protagonisten müssen 11 00:00:47,860 --> 00:00:52,500 Suche durch 200 Megabyte von E-Mails auf der Suche nach einer Adresse. 12 00:00:52,500 --> 00:00:56,090 Und sie sind schon aufgeben, wenn jemand, der reguläre Ausdrücke kennt - 13 00:00:56,090 --> 00:01:00,550 vermutlich ein Superheld - stürzt hin und schreibt einen Code 14 00:01:00,550 --> 00:01:02,970 und löst das Krimi. 15 00:01:02,970 --> 00:01:07,370 Also das wird vermutlich etwas, dass Sie ermächtigt wird, zu tun sein 16 00:01:07,370 --> 00:01:09,370 Nach diesem Seminar. 17 00:01:09,370 --> 00:01:12,250 Wir sind gerade dabei, eine kurze Einführung in die Sprache bieten 18 00:01:12,250 --> 00:01:16,770 und geben Ihnen genug nötige Kleingeld, um nach mehr Ressourcen auf eigene Faust. 19 00:01:17,680 --> 00:01:21,700 >> So reguläre Ausdrücke grundsätzlich aussehen wie diese. 20 00:01:22,930 --> 00:01:25,550 Dies ist ein regulärer Ausdruck in Ruby. 21 00:01:25,550 --> 00:01:29,280 Es ist nicht völlig anders über Sprachen. 22 00:01:29,690 --> 00:01:37,630 Wir haben nur auf Schrägstriche zu beginnen, und markieren Sie den regulären Ausdruck in Ruby. 23 00:01:37,630 --> 00:01:42,880 Und dies ist ein regulärer Ausdruck für die in E-Mail-Adresse Muster aussehen. 24 00:01:42,880 --> 00:01:49,160 So sehen wir auf den ersten Bit sieht für jedes alphanumerische Zeichen. 25 00:01:50,500 --> 00:01:54,880 Das ist, weil E-Mail-Adressen oft mit einem alphabetischen Zeichen beginnen. 26 00:01:55,460 --> 00:01:59,330 Und dann eines besonderen Charakter durch das @-Symbol gefolgt. 27 00:01:59,330 --> 00:02:03,260 Und dann das Gleiche für Domain-Namen. 28 00:02:03,260 --> 00:02:10,030 Und dann zwischen 2 und 4 Zeichen für die. Com schauen,. Net, und so weiter. 29 00:02:10,850 --> 00:02:13,200 Damit ist ein weiteres Beispiel des regulären Ausdrucks. 30 00:02:13,200 --> 00:02:17,270 So reguläre Ausdrücke sind Protokolle für die Suche nach Mustern in Text. 31 00:02:17,270 --> 00:02:21,130 Sie tun Vergleiche, Selektionen und Ersatz. 32 00:02:21,690 --> 00:02:27,970 Also ein drittes Beispiel findet alle Telefonnummern endet in 54 in einem Verzeichnis. 33 00:02:27,970 --> 00:02:34,360 Also, bevor David zerreißt der CS50 Verzeichnis konnten wir suchen 34 00:02:34,360 --> 00:02:40,450 ein Muster, wo wir stehen dann 3 Nummern dann am Ende Klammer 35 00:02:40,450 --> 00:02:44,070 3 weitere Zahlen, einem Bindestrich, 2 Zahlen und dann 54. 36 00:02:44,070 --> 00:02:48,310 Und das wäre im Wesentlichen sein, wie wir kommen mit einem regulären Ausdruck für die Suche. 37 00:02:49,150 --> 00:02:52,960 >> So gibt es - wir haben einige Dinge in CS50 getan, die ein bisschen wie sind 38 00:02:52,960 --> 00:02:59,740 reguläre Ausdrücke, so - zum Beispiel - in der Datei dictionary.C 39 00:02:59,740 --> 00:03:04,720 für die Rechtschreibprüfung Problem Set können Sie fscanf verwendet haben 40 00:03:04,720 --> 00:03:07,930 in einem Wort aus dem Wörterbuch zu lesen. 41 00:03:07,930 --> 00:03:16,240 Und Sie können sehen, der Prozentsatz 45s ist für eine Reihe von 45 Zeichen suchen. 42 00:03:16,240 --> 00:03:20,020 Also es ist so etwas wie eine rudimentäre regulären Ausdrucks. 43 00:03:21,150 --> 00:03:26,060 Und Sie können keine 45 Zeichen, die den Gesetzesentwurf in dort 44 00:03:26,060 --> 00:03:28,080 und holen diejenigen up. 45 00:03:28,080 --> 00:03:33,480 Und dann das zweite Beispiel in der jüngsten Web-Programmierung Problem 46 00:03:33,480 --> 00:03:40,760 gesetzt in der Distribution Code für php wir eigentlich tun haben einen einfachen regulären Ausdruck. 47 00:03:40,760 --> 00:03:46,790 Und dieses ist einfach nur schauen, um zu überprüfen, ob die Webseite, die übergeben wird 48 00:03:46,790 --> 00:03:51,940 entspricht entweder-oder Abmeldung registrieren. PHP. 49 00:03:52,220 --> 00:03:57,910 Und dann wieder wahr oder falsch auf der Grundlage dieser reguläre Ausdrücke. 50 00:03:59,400 --> 00:04:01,740 >> Also, wenn Sie reguläre Ausdrücke verwenden? 51 00:04:01,740 --> 00:04:04,820 Warum sind Sie heute hier? 52 00:04:05,330 --> 00:04:08,480 Also Sie wollen nicht für reguläre Ausdrücke verwenden, wenn es etwas gibt, dass 53 00:04:08,480 --> 00:04:11,640 macht den Job für Sie noch einfacher. 54 00:04:11,640 --> 00:04:15,510 So XML und HTML sind eigentlich ziemlich tricky 55 00:04:15,510 --> 00:04:18,480 reguläre Ausdrücke für so werden wir in ein wenig sehen zu schreiben. 56 00:04:19,110 --> 00:04:23,280 So gibt es spezielle Parser für diese Sprachen. 57 00:04:24,170 --> 00:04:30,060 Sie müssen auch in Ordnung zu sein mit dem Handel offs und Genauigkeit häufig. 58 00:04:30,060 --> 00:04:36,220 Wenn Sie versuchen - so sahen wir einen regulären Ausdruck für eine E-Mail-Adresse, 59 00:04:37,370 --> 00:04:42,590 sondern sagen, Sie wollten eine bestimmte E-Mail-Adresse und die schrittweise 60 00:04:42,590 --> 00:04:48,570 regulären Ausdruck könnte komplexer geworden, wie es genauer geworden. 61 00:04:49,580 --> 00:04:52,260 Also das wäre ein Kompromiss sein. 62 00:04:52,260 --> 00:04:55,330 Sie müssen sicher sein, dass Sie in Ordnung machen mit dem regulären Ausdruck. 63 00:04:55,330 --> 00:04:57,920 Wenn Sie genau wissen, was du suchst, es könnte mehr Sinn machen 64 00:04:57,920 --> 00:05:02,070 bis in die Zeit und schreiben Sie eine effektivere Parser. 65 00:05:02,070 --> 00:05:06,980 Und schließlich gibt es ein historisches Problem mit der Regelmäßigkeit 66 00:05:06,980 --> 00:05:08,940 Ausdrücke und Sprachen. 67 00:05:08,940 --> 00:05:12,960 Reguläre Ausdrücke sind eigentlich viel stärker als 68 00:05:12,960 --> 00:05:16,450 reguläre Ausdrücke pro sagen in einem formalen Sinn. 69 00:05:17,130 --> 00:05:20,150 >> Also ich will nicht zu weit zu gehen in die formale Theorie, 70 00:05:20,150 --> 00:05:24,000 aber die meisten Sprachen, die wir in Code eigentlich nicht regelmäßig. 71 00:05:24,000 --> 00:05:29,110 Und das ist, warum reguläre Ausdrücke manchmal nicht berücksichtigt werden, dass alle sicher. 72 00:05:29,670 --> 00:05:33,150 Also im Grunde gibt es eine Chomsky-Hierarchie für Sprachen, 73 00:05:33,150 --> 00:05:38,400 und reguläre Ausdrücke werden mit Hilfe Vereinigung, Verkettung zu bauen, 74 00:05:38,400 --> 00:05:41,810 und die Kleene Sterne Betrieb, dass wir in ein paar Minuten zu sehen. 75 00:05:43,130 --> 00:05:48,860 Wenn Sie interessiert sind, in der Theorie gibt es eine ganze Menge, was dort unter der Haube. 76 00:05:50,360 --> 00:05:55,880 >> So eine kurze Geschichte - nur für den Rahmen hier - regelmäßige Sets kam 77 00:05:55,880 --> 00:05:59,580 in den 1950er Jahren, und dann hatten wir einfach, dass Redakteure 78 00:05:59,580 --> 00:06:03,300 eingebaut reguläre Ausdrücke - nur die Suche nach Zeichenfolgen. 79 00:06:03,570 --> 00:06:09,110 Grep - das ist ein Kommandozeilen-Tool - war einer der ersten 80 00:06:09,110 --> 00:06:14,160 sehr beliebte Tools, dass reguläre Ausdrücke in den 1960er Jahren aufgenommen. 81 00:06:14,160 --> 00:06:20,560 In den 80er Jahren wurde Perl gebaut - ist eine Programmiersprache, die 82 00:06:20,560 --> 00:06:24,110 enthält reguläre Ausdrücke sehr prominent. 83 00:06:24,550 --> 00:06:30,130 Und dann vor kurzem hatten wir Perl Compatible Regular Expression 84 00:06:30,130 --> 00:06:35,870 Protokolle grundsätzlich in anderen Sprachen, die viel von der gleichen Syntax verwenden. 85 00:06:36,630 --> 00:06:39,840 Natürlich ist das wichtigste Ereignis war im Jahr 2008 86 00:06:39,840 --> 00:06:43,040 wo es die ersten nationalen Regular Expressions Tag, 87 00:06:43,040 --> 00:06:47,350 denen ich glaube, ist der 1. Juni, wenn Sie die feiern möchten. 88 00:06:48,430 --> 00:06:50,840 >> Wieder nur ein bisschen mehr Theorie hier. 89 00:06:52,180 --> 00:06:55,320 So gibt es ein paar verschiedene Möglichkeiten für den Bau von regulären Ausdrücken. 90 00:06:55,950 --> 00:07:02,050 Ein einfacher Weg ist, um den Ausdruck zu bauen, dass Sie zu gehen 91 00:07:02,050 --> 00:07:07,500 laufen auf die Saite zu interpretieren - im Grunde bauen eine kleine Mini-Programm, das 92 00:07:07,500 --> 00:07:11,870 wird Stücke von einem String zu analysieren und sehen, "Oh, passt das mit dem regulären Ausdruck oder nicht?" 93 00:07:12,250 --> 00:07:14,250 Und dann laufen die. 94 00:07:14,250 --> 00:07:17,300 Also, wenn Sie eine sehr kleine regulären Ausdruck haben, ist dies wahrscheinlich 95 00:07:17,300 --> 00:07:19,380 der effizienteste Weg, es zu tun. 96 00:07:20,090 --> 00:07:25,420 Und dann, wenn Sie - eine andere Möglichkeit ist es, die Rekonstruktion 97 00:07:25,420 --> 00:07:30,260 Ausdruck, wie Sie gehen, und das ist die Möglichkeit simulieren. 98 00:07:30,440 --> 00:07:37,690 Und diese frühen Versuche der regulären Ausdruck Algorithmen waren 99 00:07:37,690 --> 00:07:44,330 relativ einfach und relativ schnell, aber nicht über ein hohes Maß an Flexibilität. 100 00:07:44,330 --> 00:07:47,500 So zu tun, auch einige der Dinge, die wir gehen, um zu schauen 101 00:07:47,500 --> 00:07:52,860 heute haben wir zu komplexeren regulären Ausdruck zu tun 102 00:07:52,860 --> 00:07:56,650 Implementierungen, die möglicherweise sehr viel langsamer, so dass es etwas zu bedenken, 103 00:07:57,510 --> 00:08:02,920 Es gibt auch eine reguläre Ausdrücke Denial-of-Angriff Vielfalt 104 00:08:02,920 --> 00:08:08,330 dass das Potenzial für diese neueren Implementierungen 105 00:08:08,330 --> 00:08:10,930 reguläre Ausdrücke sehr komplex geworden. 106 00:08:11,570 --> 00:08:15,650 Und in der gleichen Sinne, dass wir in Pufferüberlauf-Attacken sahen, 107 00:08:15,650 --> 00:08:21,610 Sie haben Angriffe, dass die Arbeit, indem sie rekursive Schleifen, 108 00:08:21,610 --> 00:08:24,400 überrannt die Kapazität des Speichers. 109 00:08:24,780 --> 00:08:29,540 Und übrigens Regexen ist einer der offiziellen Plural von regulären Ausdrücken 110 00:08:29,540 --> 00:08:32,890 in Analogie zu Ochsen in der Anglo-Saxon. 111 00:08:33,500 --> 00:08:40,169 >> Okay, so dass der Python-Bibliothek viele von Ihnen hier in Person haben Macs, 112 00:08:40,169 --> 00:08:43,860 so können Sie tatsächlich ziehen Sie diese auf Ihrem Bildschirm. 113 00:08:43,860 --> 00:08:47,480 Reguläre Ausdrücke werden in Python gebaut. 114 00:08:48,070 --> 00:08:53,020 Und so Python auf Macs und auch online verfügbar unter diesem Link vorinstalliert. 115 00:08:53,770 --> 00:08:57,350 Also, wenn Sie sehen können Sie anhalten und sicherstellen, dass Sie Python 116 00:08:58,080 --> 00:09:00,170 wie wir spielen hier. 117 00:09:00,780 --> 00:09:06,420 Es ist ein Handbuch online, so, wenn Sie geben gerade Python in Ihren Computer 118 00:09:06,420 --> 00:09:10,500 Sie werden sehen, dass die Version up kommt im Terminal. 119 00:09:11,070 --> 00:09:17,720 Also habe ich einen Link bereitgestellt Handbuch zur Version 2 von Python sowie ein Spickzettel. 120 00:09:17,720 --> 00:09:23,100 Es gibt eine Version 3 von Python, aber Ihr Mac nicht unbedingt 121 00:09:23,100 --> 00:09:25,130 kommen mit, die vorinstalliert. 122 00:09:25,130 --> 00:09:27,360 Also nicht sehr unterschiedlich. 123 00:09:27,360 --> 00:09:33,270 Okay, so dass einige Grundlagen zur Verwendung von regulären Ausdrücken in Python. 124 00:09:34,080 --> 00:09:42,650 >> Also hier bin ein sehr einfacher Ausdruck verwendet, also tat ich Python import re 125 00:09:43,750 --> 00:09:47,070 und nahm dann das Ergebnis re.search. 126 00:09:47,070 --> 00:09:49,910 Und die Suche dauert 2 Argumente. 127 00:09:49,910 --> 00:09:56,040 Die erste ist der reguläre Ausdruck, und der zweite ist der Text, 128 00:09:56,040 --> 00:09:58,290 oder Zeichenfolge, die Sie analysieren möchten. 129 00:09:58,290 --> 00:10:01,210 Und dann habe ich ausgedruckt die result.group. 130 00:10:01,580 --> 00:10:05,860 Das sind also die 2 Grundfunktionen wir heute sehen, sind 131 00:10:06,790 --> 00:10:10,170 in das Lernen über reguläre Ausdrücke. 132 00:10:10,170 --> 00:10:12,880 Also einfach brechen dieser reguläre Ausdruck hier 133 00:10:12,880 --> 00:10:21,770 h und dann \ w und dann so m \ w nur akzeptiert alle alphabetischen Zeichen drin. 134 00:10:21,850 --> 00:10:26,820 So, hier sind wir für ein "h" suchen und dann noch alphabetischen Zeichen 135 00:10:26,820 --> 00:10:30,060 und dann m, so hier das würde passen Schinken 136 00:10:30,060 --> 00:10:34,480 in "Abraham Lincoln und Schinken-Sandwiches." 137 00:10:35,040 --> 00:10:37,150 Dies ist das Ergebnis dieser Gruppe. 138 00:10:37,680 --> 00:10:43,130 Eine andere Sache, die wir tun können, ist unsere vor Text-Strings in Python. 139 00:10:43,130 --> 00:10:46,220 Also ich denke, ich werde weitermachen und ziehen, dass hier oben. 140 00:10:46,220 --> 00:10:49,210 Python import re. 141 00:10:50,070 --> 00:10:54,000 Und wenn ich das Gleiche tun - sagen wir Text ist, 142 00:10:55,390 --> 00:11:00,800 "Abraham," lassen Sie uns es zu vergrößern - es geht los. 143 00:11:01,610 --> 00:11:06,430 Text ist "Abraham Schinken isst." 144 00:11:07,460 --> 00:11:15,260 Okay, und dann führen = re.search. 145 00:11:16,260 --> 00:11:22,020 Und dann ist unser Ausdruck kann h sein, und dann werde ich dot m zu tun. 146 00:11:22,020 --> 00:11:26,280 So dot dauert nur jedes Zeichen, das nicht ist eine neue Linie einschließlich Zahlen, 147 00:11:26,280 --> 00:11:28,650 Prozent-Zeichen, so etwas. 148 00:11:28,650 --> 00:11:38,030 Und dann Text - boom - und dann result.group--ja. 149 00:11:38,030 --> 00:11:41,820 Also das ist nur, wie man grundlegende Funktionalität hier umzusetzen. 150 00:11:42,300 --> 00:11:55,110 So verrückt text - - Wenn wir einen Text Ring, hatte inbegriffen sagen viele Backslashes 151 00:11:55,110 --> 00:12:01,180 und Streicher innen und Dinge, die wie Escape-Sequenzen aussehen könnte, 152 00:12:01,180 --> 00:12:08,480 dann werden wir wahrscheinlich wollen die rohe Texteingabe verwenden, um sicherzustellen, dass akzeptiert wird. 153 00:12:08,480 --> 00:12:14,120 Und das sieht einfach so. 154 00:12:14,120 --> 00:12:17,810 Also, wenn wir für jeden von ihnen in dort suchten wir sollten nichts finden. 155 00:12:19,070 --> 00:12:21,680 Aber das ist, wie Sie es umsetzen; kurz vor der Zeichenfolge 156 00:12:21,680 --> 00:12:24,990 der reguläre Ausdruck Sie legte den Brief r. 157 00:12:26,150 --> 00:12:30,260 >> Okay, also lasst uns weitermachen. 158 00:12:30,260 --> 00:12:33,730 Alles klar - so lassen Sie uns ein paar sich wiederholende Muster hier. 159 00:12:34,750 --> 00:12:39,150 So eine Sache, die Sie tun möchten, ist Dinge wiederholen 160 00:12:40,040 --> 00:12:42,480 wie Sie durch Textsuche. 161 00:12:42,480 --> 00:12:48,300 So zu tun, eine beliebige Anzahl von b gefolgt - Sie ab *. 162 00:12:48,630 --> 00:12:51,620 Und dann gibt es noch eine Reihe anderer Regeln zu. 163 00:12:51,620 --> 00:12:54,380 Und Sie können sehen alle diese auf, ich werde nur durch einige der laufen 164 00:12:54,380 --> 00:12:57,630 am häufigsten diejenigen verwendet. 165 00:12:57,630 --> 00:13:03,920 So ab + ist ein von einem N größer als 0 von b gefolgt. 166 00:13:04,510 --> 00:13:08,000 ab? ist, gefolgt von 0 oder 1 b. 167 00:13:09,190 --> 00:13:18,580 ab {N} ist ein von N aus b gefolgt, und dann so weiter. 168 00:13:18,580 --> 00:13:22,820 Wenn Sie 2 Zahlen in den geschweiften Klammern haben Sie das Festlegen einer Reihe 169 00:13:23,300 --> 00:13:25,440 das kann möglicherweise abgestimmt. 170 00:13:26,390 --> 00:13:30,420 So werden wir mehr auf ein paar sich wiederholende Muster in einer Minute zu suchen. 171 00:13:31,960 --> 00:13:42,300 Also 2 Dinge im Auge zu behalten, wenn Sie diese Pattern-Matching-Tools hier. 172 00:13:42,300 --> 00:13:52,120 Sagen Sie so wollen wir am hm von aussehen, "Abraham Lincoln macht Schinken-Sandwiches." 173 00:13:52,120 --> 00:13:55,230 Also änderte ich Abraham Lincoln den Namen Abraham. 174 00:13:55,230 --> 00:14:00,290 Und jetzt sind wir für das, was von dieser Suchfunktion zurückgegeben suchen, 175 00:14:00,290 --> 00:14:03,270 und es gibt nur Schinken in diesem Fall. 176 00:14:03,620 --> 00:14:08,080 Und sie tut das, weil Suche nur natürlich ist der am weitesten links Warteschlange. 177 00:14:08,080 --> 00:14:12,130 Und alle reguläre Ausdrücke, sofern Sie nichts anderes angeben wird das tun. 178 00:14:12,830 --> 00:14:18,880 Wenn wir alle finden wollten gibt es eine Funktion dafür - finden Sie alle. 179 00:14:18,880 --> 00:14:35,100 Also das könnte wie alle re.findall = ('h.m', Text) suchen 180 00:14:35,100 --> 00:14:44,540 und dann all.group (). 181 00:14:44,540 --> 00:14:51,040 All produziert sowohl Schinken und Schinken, in diesem Fall sowohl der Saiten in Abraham jeder Schinken. 182 00:14:51,610 --> 00:14:55,110 Damit ist eine weitere Option. 183 00:14:56,250 --> 00:15:06,940 >> Great. Die andere Sache im Auge zu behalten ist, dass reguläre Ausdrücke die größte nehmen intuitiv. 184 00:15:06,940 --> 00:15:09,520 Lassen Sie uns an diesem Beispiel zu sehen. 185 00:15:10,200 --> 00:15:16,070 Wir haben das am weitesten links Suche hier, und dann habe ich versucht, eine größere Suche 186 00:15:16,070 --> 00:15:18,800 Verwendung des Kleene Stern-Operator. 187 00:15:18,800 --> 00:15:24,180 Also für "Abraham Lincoln macht Schinken-Sandwiches," und ich bekam nur zurück 188 00:15:24,180 --> 00:15:26,280 m als Ergebnis. 189 00:15:26,280 --> 00:15:31,670 Der Grund für diesen Fehler war, dass ich eine beliebige Anzahl von genommen haben 190 00:15:31,670 --> 00:15:36,140 h ist, weil ich nicht alles geben, um in zwischen h und m gehen. 191 00:15:36,140 --> 00:15:42,010 Das einzige Beispiel, dass es m hatte - die einzigen Beispiele gibt es mit m in 192 00:15:42,010 --> 00:15:46,220 und eine beliebige Anzahl von h die waren einfach die Zeichenfolge m. 193 00:15:46,490 --> 00:15:51,850 Dann versuchte ich es wieder, ich sagte: "Okay, lassen Sie uns die tatsächliche größte Gruppe hier." 194 00:15:51,850 --> 00:15:59,670 Und dann habe ich h. * M, so dass nur gibt eine beliebige Anzahl von Zeichen zwischen h und m. 195 00:16:00,280 --> 00:16:02,950 Und wenn Sie gerade erst anfangen und denken: "Oh, okay, auch dies wird 196 00:16:02,950 --> 00:16:11,560 mich Schinken, "es tatsächlich dauert alles aus dem h in Abraham Lincoln 197 00:16:11,560 --> 00:16:13,690 den ganzen Weg bis zum Ende des Schinkens. 198 00:16:14,040 --> 00:16:18,110 Es ist gierig, es sieht h - all diese anderen Text - m, 199 00:16:18,110 --> 00:16:21,280 und das ist, was es nimmt in. 200 00:16:22,060 --> 00:16:27,480 Dies ist eine besonders krasse - dies ist ein Feature, das wir können auch 201 00:16:27,480 --> 00:16:30,670 geben für sein nicht gierig mit anderen Funktionen. 202 00:16:31,480 --> 00:16:34,490 Aber das ist etwas, das wir im Auge behalten vor allem 203 00:16:34,490 --> 00:16:38,720 wenn man HTML-Text, ist das ein Grund, dass 204 00:16:38,720 --> 00:16:41,500 reguläre Ausdrücke sind für HTML schwierig. 205 00:16:42,460 --> 00:16:46,310 Denn wenn Sie ein HTML-Tag geöffnet und dann viele Sachen in der Mitte 206 00:16:46,310 --> 00:16:49,820 und dann einige andere HTML-Tag geschlossen viel später in das Programm, 207 00:16:49,820 --> 00:16:55,420 Sie haben gerade einen großen Teil Ihrer HTML-Code möglicherweise versehentlich gegessen. 208 00:16:56,200 --> 00:17:01,840 >> Alle Recht - so mehr Sonderzeichen, wie viele andere Sprachen, 209 00:17:01,840 --> 00:17:04,780 wir entfliehen mit dem Schrägstrich. 210 00:17:04,780 --> 00:17:10,329 So können wir den Punkt, um jedes Zeichen außer für eine neue Zeile zu spezifizieren. 211 00:17:10,329 --> 00:17:14,550 Wir können die Flucht w jede alphabetischen Zeichen angeben. 212 00:17:14,550 --> 00:17:20,329 Und analog Flucht d für integer - numerische Zeichen. 213 00:17:20,630 --> 00:17:27,440 Wir können angeben - wir können Klammern verwenden, um verwandte Ausdrücke angeben. 214 00:17:27,440 --> 00:17:30,970 So würde dies akzeptieren, b oder c. 215 00:17:31,320 --> 00:17:37,000 Und wir können auch angeben, oder Optionen für entweder a oder b. 216 00:17:37,000 --> 00:17:41,110 Zum Beispiel - wenn wir für mehrere Möglichkeiten suchen 217 00:17:41,110 --> 00:17:44,940 in Klammern wir die oder Betreiber wie in verwenden - 218 00:17:44,940 --> 00:17:52,480 so lassen Sie uns zurück zu diesem Beispiel hier. 219 00:17:53,000 --> 00:17:59,790 Und nun lassen Sie uns - lassen Sie uns zurück zu diesem Beispiel hier, und dann 220 00:17:59,790 --> 00:18:12,290 ae nehmen - so sollte dies zurück - ich denke, das ist noch Abraham. 221 00:18:12,290 --> 00:18:17,410 Also das - wenn wir alle tun - großartig. 222 00:18:17,410 --> 00:18:22,700 Also lassen Sie uns den Text hier aktualisieren. 223 00:18:22,700 --> 00:18:34,690 "Abraham Schinken isst, während seine Säumen -. Während Säumen" Great. 224 00:18:44,090 --> 00:18:47,330 All. Great. Jetzt bekommen wir Schinken, Schinken und Saum. 225 00:18:48,510 --> 00:18:59,370 Während Säumen - während summte ihm - während summt zu säumen ihn. Great. 226 00:19:00,350 --> 00:19:03,250 Dasselbe. 227 00:19:03,820 --> 00:19:09,180 Nun kehrt gerade noch Schinken, Schinken und Saum ohne Kommissionierung bis auf das Brummen oder ihn. 228 00:19:09,940 --> 00:19:22,600 Toll - so was ist, wenn wir entweder sehen wollte, dass - so konnten wir auch tun 229 00:19:23,510 --> 00:19:33,810 ihn oder - wir kommen darauf zurück. 230 00:19:34,810 --> 00:19:45,760 Ok - so - alles in Ordnung - in Positionen, die Sie können auch den Cursor oder das Dollarzeichen 231 00:19:45,760 --> 00:19:49,350 um anzugeben, dass Sie etwas am Anfang oder Ende einer Zeichenkette suchen. 232 00:19:50,260 --> 00:19:52,260 Oder der Anfang oder das Ende eines Wortes. 233 00:19:52,400 --> 00:19:54,470 Das ist eine Möglichkeit, dass zu verwenden. 234 00:19:55,630 --> 00:20:01,160 >> Ok - so lassen Sie uns spielen, um mit einem etwas größeren Textblock. 235 00:20:03,950 --> 00:20:08,310 Lassen Sie uns sagen, diese Zeile hier - diese Aussage hier. 236 00:20:08,310 --> 00:20:11,360 Die Macht des regulären Ausdrucks ist, dass sie Muster angeben 237 00:20:11,360 --> 00:20:13,390 nicht nur Zeichen fixiert. 238 00:20:14,900 --> 00:20:18,790 Lassen Sie uns - nennen wir diesen Block. 239 00:20:22,400 --> 00:20:27,110 Dann lesen wir alle, dass in. 240 00:20:28,890 --> 00:20:50,820 Und dann haben ein - lassen Sie uns alle =; so was sind einige Dinge, die wir in hier gewinnbringend? 241 00:20:50,820 --> 00:20:54,070 Wir konnten für die Expression Ohr schauen. 242 00:20:55,050 --> 00:21:01,520 Nicht sehr interessant. Wie wäre es damit? Wir werden sehen, was passiert. 243 00:21:03,710 --> 00:21:05,710 Ich gab es ein Problem. 244 00:21:06,380 --> 00:21:10,750 So beliebige Anzahl von Dingen vor der Wiederverwendung und alle. 245 00:21:10,750 --> 00:21:15,630 Also das sollte zurückkehren alles von Anfang an bis zu allen re vielleicht ein paar Mal. 246 00:21:18,800 --> 00:21:21,970 Und dann haben wir hier die Leistung von regulären Ausdrücken ist, dass sie 247 00:21:21,970 --> 00:21:24,900 können Muster geben nicht nur Zeichen hier sind. 248 00:21:24,900 --> 00:21:28,510 Also den ganzen Weg bis zum Finale wieder, begann es mit dem am weitesten links und war gierig. 249 00:21:30,710 --> 00:21:32,710 Lassen Sie uns sehen - was sonst könnten wir suchen. 250 00:21:32,710 --> 00:21:39,860 Ich denke, eine Sache, wenn Sie Interesse an der Suche nach den Pronomen waren sie und er, 251 00:21:39,860 --> 00:21:44,600 Sie könnte für s gleich 0 oder 1 überprüfen 252 00:21:44,600 --> 00:21:49,710 und der Ausdruck, den er, und das wird wahrscheinlich nicht zurückkehren - 253 00:21:49,710 --> 00:21:58,020 oh, ich denke, es kehrte er, weil wir dort an der Macht, an diesem Tag auf der Suche sind, sind hier. 254 00:22:00,590 --> 00:22:06,270 Lassen Sie uns versuchen, dass diese Angabe am Anfang von etwas kommen muss. 255 00:22:06,640 --> 00:22:09,530 Lassen Sie uns sehen, ob das wieder aus. 256 00:22:09,530 --> 00:22:19,630 So können wir tun, Fett, und da haben wir nicht bekommen nichts, weil sie und er 257 00:22:19,630 --> 00:22:22,870 nicht in dieser Phrase auftreten. 258 00:22:24,960 --> 00:22:30,410 Great. Ok - so zurück auf die Katze hier. 259 00:22:30,410 --> 00:22:35,720 So komplexe Muster zu verletzen das Gehirn. 260 00:22:35,720 --> 00:22:40,500 Also das ist, warum wir reguläre Ausdrücke, um diese Probleme zu vermeiden verwenden. 261 00:22:40,820 --> 00:22:43,520 >> Also hier sind einige andere nützliche Modi spielen, um mit. 262 00:22:43,520 --> 00:22:50,290 Wir schauten Suche heute, aber Sie können auch Spiel, Split, findall und Gruppen. 263 00:22:50,290 --> 00:22:53,970 So andere coole Dinge, die Sie mit regulären Ausdrücken neben nur tun können 264 00:22:53,970 --> 00:22:58,870 Suche nach Mustern nimmt ein Muster und hält alle Spiele - 265 00:22:58,870 --> 00:23:02,530 seine Variablen - und dann mit denen in Ihrem Code später auf. 266 00:23:02,850 --> 00:23:05,980 Das kann sehr hilfreich sein. Andere Dinge werden könnten zählen. 267 00:23:05,980 --> 00:23:11,720 So können wir die Anzahl der Instanzen eines Muster eines regulären Ausdrucks, 268 00:23:11,720 --> 00:23:13,960 und das ist, was können wir für Gruppen verwenden. 269 00:23:13,960 --> 00:23:17,550 Und anderen Modi sind möglich. 270 00:23:18,040 --> 00:23:22,980 Also ich will nur ein bisschen mehr reden über andere Möglichkeiten, wie Sie reguläre Ausdrücke verwenden können. 271 00:23:22,980 --> 00:23:29,100 >> So eine erweiterte Anwendung ist in Fuzzy Matching. 272 00:23:29,100 --> 00:23:33,450 Also, wenn Sie für einen Text für den Ausdruck, Julius Caesar suchen, 273 00:23:33,450 --> 00:23:37,740 und Sie sehen entweder Gaius Julius Caesar oder den Namen Julius Caesar in anderen Sprachen, 274 00:23:37,740 --> 00:23:44,400 dann könnten Sie auch wollen, um etwas Gewicht zu diesen Werten zuordnen. 275 00:23:44,400 --> 00:23:48,930 Und wenn es in der Nähe genug - wenn es eine bestimmte Schwelle überschreitet - dann wollen 276 00:23:48,930 --> 00:23:50,860 in der Lage sein, um Julius Caesar zu akzeptieren. 277 00:23:50,860 --> 00:24:00,580 So gibt es ein paar verschiedene Implementierungen für die in einigen anderen Sprachen. 278 00:24:02,580 --> 00:24:08,420 Hier sind einige andere Tools, Regex Pal - ein handliches, kleines App online 279 00:24:08,420 --> 00:24:12,190 überprüfen, ob Ihre reguläre Ausdrücke richtig zusammengesetzt sind. 280 00:24:12,190 --> 00:24:18,500 Es gibt auch Standalone-Tools, die Sie von Ihrem Desktop ausgeführt werden können 281 00:24:18,500 --> 00:24:22,100 wie Ultra-Pico, und so gut wie nur Kochbücher. 282 00:24:22,100 --> 00:24:25,410 Also, wenn Sie ein Projekt zu machen, dass eine Tonne von regulären Ausdrücken beinhaltet 283 00:24:25,410 --> 00:24:29,810 Dies ist wahrscheinlich der Ort, um außerhalb des Anwendungsbereichs von heute gehen. 284 00:24:31,520 --> 00:24:35,770 Und dann nur, um Ihnen ein Gefühl dafür, wie es üblich 285 00:24:35,770 --> 00:24:44,090 gibt es in Unix grep, hat Perl eingebaut, und C gibt es PCRE für C. 286 00:24:44,090 --> 00:24:48,890 Und dann all diese anderen Sprachen auch reguläre Ausdrücke Pakete 287 00:24:48,890 --> 00:24:52,020 das arbeiten mit im Wesentlichen der gleichen Syntax bekamen wir einen Vorgeschmack von heute. 288 00:24:52,020 --> 00:24:54,790 PHP, Java, Ruby, und so weiter. 289 00:24:56,080 --> 00:24:58,980 >> Google Code Search ist eigentlich erwähnenswert, es ist eines der 290 00:24:58,980 --> 00:25:05,720 relativ wenige Anwendungen gibt, die die Öffentlichkeit zugreifen können 291 00:25:05,720 --> 00:25:07,800 seine Datenbank mit regulären Ausdrücken. 292 00:25:07,800 --> 00:25:12,920 Also, wenn Sie auf Google Code Search suchen finden Sie Code 293 00:25:12,920 --> 00:25:16,880 wenn Sie für eine Instanz, wie eine Funktion verwendet werden könnte suchen, 294 00:25:16,880 --> 00:25:21,610 Sie können einen regulären Ausdruck, um diese Funktion ist in allen möglichen verschiedenen Fällen verwendet zu finden. 295 00:25:21,610 --> 00:25:28,000 Sie könnten für fwrite suchen, und dann könnte man für die Flagge von Schreib sehen oder lesen 296 00:25:28,000 --> 00:25:32,000 wenn man wollte ein Beispiel für fwrite in diesem Fall verwendet werden. 297 00:25:33,530 --> 00:25:37,010 Also die gleiche Sache gibt, und hier sind einige Referenzen. 298 00:25:37,010 --> 00:25:40,990 Dies wird auch online verfügbar sein, so gehen nach vorne, wenn 299 00:25:40,990 --> 00:25:45,560 Sie wollen an Python, grep, Perl aussehen - Sie wollen einfach nur etwas Inspiration zu bekommen 300 00:25:45,560 --> 00:25:50,650 oder wenn Sie mehr über die Theorie hier schauen wollen, sind einige gute jumping off Plätze. 301 00:25:50,650 --> 00:25:53,870 Vielen Dank. 302 00:25:58,470 --> 00:25:59,910 [CS50.TV]