1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Σεμινάριο: Pattern Matching με Κανονικές Εκφράσεις] 2 00:00:02,000 --> 00:00:04,000 [John 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 Σε αυτό το comic υπάρχει ένα μυστήριο φόνο, όπου ο δολοφόνος έχει 10 00:00:42,370 --> 00:00:47,860 ακολουθείται κάποιος στις διακοπές, και οι πρωταγωνιστές πρέπει να 11 00:00:47,860 --> 00:00:52,500 αναζήτηση μέσω 200 megabytes των emails που αναζητούν για μια διεύθυνση. 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 Και αυτό είναι μια κανονική έκφραση για να ψάξουν για το πρότυπο διεύθυνση email. 24 00:01:42,880 --> 00:01:49,160 Έτσι βλέπουμε το πρώτο bit αναζητά κάθε αλφαριθμητικό χαρακτήρα. 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,. Net, και ούτω καθεξής. 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 Έτσι, πριν από τον David σχίζει επάνω στον κατάλογο 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 για τον έλεγχο set πρόβλημα ξόρκι που μπορεί να έχουν χρησιμοποιηθεί 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 Και τότε το δεύτερο παράδειγμα στην πιο πρόσφατη πρόβλημα προγραμματισμού web 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 Έτσι, αυτό θα είναι ένα εμπόριο off. 62 00:04:52,260 --> 00:04:55,330 Θα πρέπει να είστε σίγουροι ότι είστε εντάξει κάνει με την κανονική έκφραση. 63 00:04:55,330 --> 00:04:57,920 Αν ξέρετε ακριβώς τι ψάχνετε θα μπορούσε να έχει περισσότερο νόημα 64 00:04:57,920 --> 00:05:02,070 να θέσει στο χρόνο και να γράψει ένα πιο αποτελεσματικό αναλυτή. 65 00:05:02,070 --> 00:05:06,980 Και, τέλος, υπάρχει ένα ιστορικό θέμα με την κανονικότητα 66 00:05:06,980 --> 00:05:08,940 από τις εκφράσεις και τις γλώσσες. 67 00:05:08,940 --> 00:05:12,960 Οι κανονικές εκφράσεις είναι στην πραγματικότητα πολύ πιο ισχυρή από ό, τι 68 00:05:12,960 --> 00:05:16,450 κανονικές εκφράσεις ανά πω σε μια τυπική έννοια του όρου. 69 00:05:17,130 --> 00:05:20,150 >> Γι 'αυτό δεν θέλω να πάει πολύ μακριά στην επίσημη θεωρία, 70 00:05:20,150 --> 00:05:24,000 αλλά οι περισσότερες γλώσσες που έχουμε κώδικα στην πραγματικότητα δεν είναι τακτική. 71 00:05:24,000 --> 00:05:29,110 Και αυτός είναι ο λόγος κανονικές εκφράσεις κάποιες φορές δεν θεωρούνται όλα αυτά ασφαλή. 72 00:05:29,670 --> 00:05:33,150 Έτσι, βασικά, υπάρχει μια ιεραρχία Τσόμσκι για τις γλώσσες, 73 00:05:33,150 --> 00:05:38,400 και οι κανονικές εκφράσεις δημιουργηθεί χρησιμοποιώντας ένωση, συνένωση, 74 00:05:38,400 --> 00:05:41,810 και τη λειτουργία αστέρι Kleene ότι θα δούμε σε λίγα λεπτά. 75 00:05:43,130 --> 00:05:48,860 Αν σας ενδιαφέρει η θεωρία ότι υπάρχει μια αρκετά μεγάλη συμβαίνει εκεί κάτω από την κουκούλα. 76 00:05:50,360 --> 00:05:55,880 >> Έτσι, μια σύντομη ιστορία - μόνο για το πλαίσιο εδώ - τακτική σετ ήρθε 77 00:05:55,880 --> 00:05:59,580 στη δεκαετία του 1950, και στη συνέχεια είχαμε απλά συντάκτες που 78 00:05:59,580 --> 00:06:03,300 ενσωματωθεί κανονικές εκφράσεις - απλά ψάχνουν για έγχορδα. 79 00:06:03,570 --> 00:06:09,110 Grep - το οποίο είναι ένα εργαλείο γραμμής εντολών - ήταν ένα από τα πρώτα 80 00:06:09,110 --> 00:06:14,160 πολύ δημοφιλή εργαλεία που ενσωματώνονται κανονικές εκφράσεις στη δεκαετία του 1960. 81 00:06:14,160 --> 00:06:20,560 Στη δεκαετία του '80, Perl χτίστηκε - είναι μια γλώσσα προγραμματισμού που 82 00:06:20,560 --> 00:06:24,110 ενσωματώνει κανονικές εκφράσεις είναι πολύ εμφανές. 83 00:06:24,550 --> 00:06:30,130 Και στη συνέχεια, πιο πρόσφατα, είχαμε Perl συμβατό με κανονική έκφραση 84 00:06:30,130 --> 00:06:35,870 πρωτόκολλα ουσιαστικά και σε άλλες γλώσσες που χρησιμοποιούν σε μεγάλο βαθμό την ίδια σύνταξη. 85 00:06:36,630 --> 00:06:39,840 Φυσικά, το πιο σημαντικό γεγονός ήταν το 2008 86 00:06:39,840 --> 00:06:43,040 όπου υπήρξε η πρώτη Εθνική Ημέρα τακτική εκφράσεις, 87 00:06:43,040 --> 00:06:47,350 τα οποία πιστεύω ότι είναι ο Ιούνιος 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 τρέξει για το string ερμηνεύουν - βασικά οικοδομήσουμε ένα μικρό μίνι-πρόγραμμα που 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 Και σε ένα μεγάλο μέρος την ίδια έννοια που είδαμε στις επιθέσεις υπερχείλισης buffer, 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 κατ 'αναλογία με βόδια στο Anglo-Saxon. 111 00:08:33,500 --> 00:08:40,169 >> Εντάξει, έτσι ώστε η Βιβλιοθήκη Python πολλοί από εσάς εδώ στο πρόσωπο έχουν Macs, 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 h και στη συνέχεια \ w και στη συνέχεια m έτσι \ w δέχεται μόνο κάθε γράμμα της αλφαβήτου εκεί. 134 00:10:21,850 --> 00:10:26,820 Έτσι, εδώ ψάχνουμε για ένα "h" και στη συνέχεια ένα άλλο γράμμα της αλφαβήτου 135 00:10:26,820 --> 00:10:30,060 και στη συνέχεια m, έτσι και εδώ που θα ταιριάζουν με ζαμπόν 136 00:10:30,060 --> 00:10:34,480 σε, "Αβραάμ Λίνκολν και ζαμπόν σάντουιτς." 137 00:10:35,040 --> 00:10:37,150 Αυτό είναι το αποτέλεσμα της εν λόγω ομάδας. 138 00:10:37,680 --> 00:10:43,130 Ένα άλλο πράγμα που μπορούμε να κάνουμε είναι να χρησιμοποιήσουμε πριν χορδές μας των κειμένων σε 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 Και τότε η έκφραση μας μπορεί να είναι h, και στη συνέχεια θα κάνω dot m. 146 00:11:22,020 --> 00:11:26,280 Έτσι dot διαρκεί μόλις Οποιοσδήποτε χαρακτήρας που δεν είναι μια νέα γραμμή, συμπεριλαμβανομένων των αριθμών, 147 00:11:26,280 --> 00:11:28,650 σημάδια ποσοστό, κάτι τέτοιο. 148 00:11:28,650 --> 00:11:38,030 Και τότε το κείμενο - boom - και στη συνέχεια result.group--ναι. 149 00:11:38,030 --> 00:11:41,820 Έτσι, αυτό είναι ακριβώς το πώς να εφαρμόσουν τις βασικές λειτουργίες εδώ. 150 00:11:42,300 --> 00:11:55,110 Αν είχαμε ένα δαχτυλίδι κείμενο αυτό - αυτή η τρελή κείμενο - συμπεριλαμβάνεται λένε πολλά πίσω καθέτους 151 00:11:55,110 --> 00:12:01,180 και έγχορδα μέσα και τα πράγματα που θα μπορούσαν να μοιάζουν με ακολουθίες διαφυγής, 152 00:12:01,180 --> 00:12:08,480 τότε ίσως θέλετε να χρησιμοποιήσετε την πρώτη μέθοδο εισαγωγής κειμένου για να βεβαιωθείτε ότι είναι αποδεκτή. 153 00:12:08,480 --> 00:12:14,120 Και αυτό ακριβώς φαίνεται σαν αυτό. 154 00:12:14,120 --> 00:12:17,810 Έτσι, αν ψάχναμε για καθέναν από αυτούς εκεί μέσα δεν θα πρέπει να βρούμε κάτι. 155 00:12:19,070 --> 00:12:21,680 Αλλά αυτό είναι το πώς θα το εφαρμόσουν? Λίγο πριν από τη σειρά των 156 00:12:21,680 --> 00:12:24,990 η κανονική έκφραση βάζετε το γράμμα R. 157 00:12:26,150 --> 00:12:30,260 >> Εντάξει, ας συνεχίσουμε. 158 00:12:30,260 --> 00:12:33,730 Εντάξει - οπότε ας ρίξουμε μια ματιά σε μερικά μοτίβα που επαναλαμβάνονται εδώ. 159 00:12:34,750 --> 00:12:39,150 Έτσι, ένα πράγμα που θέλετε να κάνετε είναι να επαναλάβετε τα πράγματα 160 00:12:40,040 --> 00:12:42,480 όπως ψάχνετε μέσα από το κείμενο. 161 00:12:42,480 --> 00:12:48,300 Έτσι για να κάνει μια ακολουθούμενο από οποιονδήποτε αριθμό των β - κάνετε ab *. 162 00:12:48,630 --> 00:12:51,620 Και τότε υπάρχουν μια σειρά από άλλους κανόνες πάρα πολύ. 163 00:12:51,620 --> 00:12:54,380 Και μπορείτε να δείτε όλα αυτά μέχρι? Θα τρέξω μέσα από μερικά από τα 164 00:12:54,380 --> 00:12:57,630 που χρησιμοποιούνται πιο συχνά αυτά. 165 00:12:57,630 --> 00:13:03,920 Έτσι ab + είναι ένα που ακολουθείται από οποιοδήποτε Ν μεγαλύτερη από μηδέν του b. 166 00:13:04,510 --> 00:13:08,000 ab; είναι μια που ακολουθείται από 0 ή 1 b. 167 00:13:09,190 --> 00:13:18,580 ab {Ν} είναι ένα ακολουθούμενη από Ν του Β, και στη συνέχεια ούτω καθεξής. 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 Όλα παράγει τόσο ζαμπόν και ζαμπόν? Σε αυτή την περίπτωση οι δύο χορδές σε Abraham κάθε ζαμπόν. 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 χρησιμοποιώντας το Kleene φορέα αστέρων. 187 00:15:18,800 --> 00:15:24,180 Έτσι, για, "Αβραάμ Λίνκολν κάνει σάντουιτς ζαμπόν," και εγώ μόλις επέστρεψα 188 00:15:24,180 --> 00:15:26,280 m, ως αποτέλεσμα. 189 00:15:26,280 --> 00:15:31,670 Ο λόγος για αυτό το λάθος ήταν ότι θα μπορούσα να έχω λάβει οποιοδήποτε αριθμό των 190 00:15:31,670 --> 00:15:36,140 h είναι γιατί δεν προσδιορίζει κάτι να πάει στο μεταξύ h και m. 191 00:15:36,140 --> 00:15:42,010 Το μόνο παράδειγμα εκεί που είχε m - τα μόνα παραδείγματα εκεί με m σε αυτό 192 00:15:42,010 --> 00:15:46,220 και οποιοσδήποτε αριθμός του h ήταν ακριβώς το m string. 193 00:15:46,490 --> 00:15:51,850 Στη συνέχεια δοκίμασα πάλι? Είπα, "Εντάξει, ας πάρει την πραγματική μεγαλύτερη ομάδα εδώ." 194 00:15:51,850 --> 00:15:59,670 Και τότε έκανα h. * M, έτσι ώστε να επιστρέφει ακριβώς οποιοδήποτε αριθμό των χαρακτήρων μεταξύ h και m. 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 Είναι άπληστοι? Βλέπει h - όλα αυτά άλλο κείμενο - m, 199 00:16:18,110 --> 00:16:21,280 και αυτό είναι ό, τι χρειάζεται μέσα 200 00:16:22,060 --> 00:16:27,480 Πρόκειται για μια ιδιαίτερα σκανδαλώδη - αυτό είναι ένα χαρακτηριστικό μπορούμε επίσης να 201 00:16:27,480 --> 00:16:30,670 διευκρινίζει ότι δεν ήταν άπληστοι με άλλες λειτουργίες. 202 00:16:31,480 --> 00:16:34,490 Αλλά αυτό είναι κάτι που πρέπει να έχουμε κατά νου, ιδίως 203 00:16:34,490 --> 00:16:38,720 κατά την εξέταση HTML κείμενο, το οποίο είναι ένας λόγος που 204 00:16:38,720 --> 00:16:41,500 κανονικές εκφράσεις είναι δύσκολο για την HTML. 205 00:16:42,460 --> 00:16:46,310 Διότι, αν έχετε μια ανοικτή ετικέτα HTML και στη συνέχεια πολλά πράγματα στη μέση 206 00:16:46,310 --> 00:16:49,820 και στη συνέχεια κάποιες άλλες HTML κλειστά tag πολύ αργότερα στο πρόγραμμα, 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 Έτσι, αυτό θα δεχόταν, 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 Great - ναι, τι αν θέλαμε να δούμε είτε ότι - έτσι θα μπορούσαμε επίσης να κάνουμε 229 00:19:23,510 --> 00:19:33,810 αυτόν ή - θα επανέλθουμε σε αυτό. 230 00:19:34,810 --> 00:19:45,760 Εντάξει - έτσι - εντάξει - σε θέσεις μπορείτε επίσης να χρησιμοποιήσετε το καρέ ή το σύμβολο του δολαρίου 231 00:19:45,760 --> 00:19:49,350 να διευκρινιστεί ότι ψάχνετε για κάτι που στην αρχή ή το τέλος μιας συμβολοσειράς. 232 00:19:50,260 --> 00:19:52,260 Ή η αρχή ή το τέλος μιας λέξης. 233 00:19:52,400 --> 00:19:54,470 Αυτός είναι ένας τρόπος για να το χρησιμοποιήσετε. 234 00:19:55,630 --> 00:20:01,160 >> Εντάξει - οπότε ας παίξει γύρω με ένα ελαφρώς μεγαλύτερο τμήμα κειμένου. 235 00:20:03,950 --> 00:20:08,310 Ας πούμε αυτή τη σειρά εδώ - αυτή τη δήλωση εδώ. 236 00:20:08,310 --> 00:20:11,360 Η δύναμη της κανονική έκφραση είναι ότι μπορούν να καθορίζουν τα πρότυπα 237 00:20:11,360 --> 00:20:13,390 δεν καθορίζεται μόνο χαρακτήρες. 238 00:20:14,900 --> 00:20:18,790 Ας κάνουν - ας το ονομάσουμε αυτό το μπλοκ. 239 00:20:22,400 --> 00:20:27,110 Τότε θα διαβάσει όλα αυτά μέσα 240 00:20:28,890 --> 00:20:50,820 Και έχουν στη συνέχεια ένα - ας κάνει όλα =? Ναι, τι είναι μερικά πράγματα που θα μπορούσαμε να αναζητήσετε εδώ κερδοφόρα; 241 00:20:50,820 --> 00:20:54,070 Θα μπορούσαμε να κοιτάξουμε για το αυτί έκφρασης. 242 00:20:55,050 --> 00:21:01,520 Δεν είναι πολύ ενδιαφέρουσα. Τι λέτε για αυτό; Θα δούμε τι θα συμβεί. 243 00:21:03,710 --> 00:21:05,710 Έδωσα ένα πρόβλημα. 244 00:21:06,380 --> 00:21:10,750 Έτσι, πολλά πράγματα πριν από την εκ νέου και όλα. 245 00:21:10,750 --> 00:21:15,630 Έτσι, αυτό θα πρέπει να επιστρέψουν τα πάντα, από την αρχή μέχρι όλες οι δράσεις 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 μπορείτε να ελέγξετε για s είναι ίσο με 0 ή 1 252 00:21:44,600 --> 00:21:49,710 και η έκφραση ο ίδιος, και αυτό είναι κατά πάσα πιθανότητα δεν πρόκειται να επιστρέψει - 253 00:21:49,710 --> 00:21:58,020 OH, υποθέτω ότι επέστρεψε γιατί εκεί εξετάζουμε τη δύναμη, εκείνη την ημέρα, εδώ είναι. 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 - ένα πρακτικό μικρό app απευθείας σύνδεση για να 279 00:24:08,420 --> 00:24:12,190 ελέγξτε αν οι κανονικές εκφράσεις σας αποτελείται σωστά. 280 00:24:12,190 --> 00:24:18,500 Υπάρχουν, επίσης, αυτόνομα εργαλεία που μπορείτε να εκτελέσετε από τον υπολογιστή σας 281 00:24:18,500 --> 00:24:22,100 όπως Ultra Pico, και καθώς μόνο βιβλία μαγειρικής. 282 00:24:22,100 --> 00:24:25,410 Έτσι, αν κάνετε ένα έργο που περιλαμβάνει έναν τόνο των κανονικών εκφράσεων 283 00:24:25,410 --> 00:24:29,810 Αυτό είναι πιθανώς ο τόπος για να πάει έξω από το πεδίο εφαρμογής του σήμερα. 284 00:24:31,520 --> 00:24:35,770 Και τότε ακριβώς για να σας δώσει μια αίσθηση του πώς είναι κοινή 285 00:24:35,770 --> 00:24:44,090 υπάρχει grep στο Unix, Perl έχει built-in και C υπάρχει PCRE για το C. 286 00:24:44,090 --> 00:24:48,890 Και τότε όλοι αυτοί οι άλλες γλώσσες έχουν επίσης τακτικές πακέτα έκφρασης 287 00:24:48,890 --> 00:24:52,020 που λειτουργούν με κατ 'ουσίαν την ίδια σύνταξη πήραμε μια γεύση του σήμερα. 288 00:24:52,020 --> 00:24:54,790 PHP, Java, Ruby, και ούτω καθεξής. 289 00:24:56,080 --> 00:24:58,980 >> Google Code Search είναι πραγματικά αξίζει να αναφερθεί? Είναι ένα από τα 290 00:24:58,980 --> 00:25:05,720 σχετικά λίγες εφαρμογές εκεί έξω που επιτρέπει στο κοινό να έχει πρόσβαση 291 00:25:05,720 --> 00:25:07,800 βάση δεδομένων του χρησιμοποιώντας κανονικές εκφράσεις. 292 00:25:07,800 --> 00:25:12,920 Έτσι, αν κοιτάξετε στο Google Code Search, μπορείτε να βρείτε τον κώδικα 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]