1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Seminar: Corak Pedang dengan Ungkapan Biasa] 2 00:00:02,000 --> 00:00:04,000 [John University Mussman-Harvard] 3 00:00:04,000 --> 00:00:07,220 [Ini adalah CS50.-CS50.TV] 4 00:00:07,780 --> 00:00:11,610 Okay. Well, semua orang dialu-alukan. Ini adalah CS50 2012. 5 00:00:11,780 --> 00:00:16,610 Nama saya John, dan saya akan bercakap hari ini mengenai ungkapan-ungkapan yang tetap. 6 00:00:16,610 --> 00:00:22,530 Ungkapan biasa terutamanya alat, tetapi juga kadang-kadang digunakan 7 00:00:22,530 --> 00:00:28,650 dalam kod aktif pada dasarnya perlawanan corak dan tali. 8 00:00:28,650 --> 00:00:33,800 Jadi di sini adalah satu komik web dari xkcd. 9 00:00:34,440 --> 00:00:42,370 Dalam komik ini terdapat satu misteri pembunuhan di mana pembunuh mempunyai 10 00:00:42,370 --> 00:00:47,860 diikuti orang bercuti, dan pihak yang terbabit perlu 11 00:00:47,860 --> 00:00:52,500 mencari melalui 200 megabait e-mel mencari alamat. 12 00:00:52,500 --> 00:00:56,090 Dan mereka adalah kira-kira untuk berputus asa apabila seseorang yang tahu ungkapan biasa - 13 00:00:56,090 --> 00:01:00,550 mungkin superhero - swoops ke bawah dan menulis beberapa kod 14 00:01:00,550 --> 00:01:02,970 dan menyelesaikan misteri pembunuhan itu. 15 00:01:02,970 --> 00:01:07,370 Jadi mungkin yang akan menjadi sesuatu yang anda akan diberi kuasa untuk berbuat 16 00:01:07,370 --> 00:01:09,370 selepas seminar ini. 17 00:01:09,370 --> 00:01:12,250 Kami hanya akan memberikan pengenalan ringkas kepada bahasa 18 00:01:12,250 --> 00:01:16,770 dan memberi anda cukup kemampuan untuk pergi selepas lebih banyak sumber sendiri. 19 00:01:17,680 --> 00:01:21,700 >> Jadi ungkapan-ungkapan yang tetap melihat pada dasarnya seperti ini. 20 00:01:22,930 --> 00:01:25,550 Ini adalah ungkapan yang biasa dalam Ruby. 21 00:01:25,550 --> 00:01:29,280 Ia tidak terlalu berbeza di seluruh bahasa. 22 00:01:29,690 --> 00:01:37,630 Kami mempunyai hanya pada garis condong untuk memulakan dan menandakan ungkapan biasa dalam Ruby. 23 00:01:37,630 --> 00:01:42,880 Dan ini adalah satu ungkapan biasa untuk mencari dalam e-mel corak alamat. 24 00:01:42,880 --> 00:01:49,160 Jadi kita lihat pada bit pertama kelihatan untuk mana-mana watak abjad angka. 25 00:01:50,500 --> 00:01:54,880 Ini kerana alamat e-mel sering perlu bermula dengan huruf abjad. 26 00:01:55,460 --> 00:01:59,330 Dan kemudian apa-apa sifat khas yang diikuti oleh simbol @. 27 00:01:59,330 --> 00:02:03,260 Dan kemudian perkara yang sama untuk nama domain. 28 00:02:03,260 --> 00:02:10,030 Dan kemudian di antara 2 dan 4 aksara untuk mencari. Com,. Bersih, dan sebagainya. 29 00:02:10,850 --> 00:02:13,200 Jadi adalah satu lagi contoh ungkapan biasa. 30 00:02:13,200 --> 00:02:17,270 Jadi ungkapan yang kerap adalah protokol untuk mencari patters dalam teks. 31 00:02:17,270 --> 00:02:21,130 Mereka melakukan perbandingan, pilihan, dan penggantian. 32 00:02:21,690 --> 00:02:27,970 Jadi contoh ketiga mencari semua nombor-nombor telefon yang berakhir pada 54 di direktori. 33 00:02:27,970 --> 00:02:34,360 Jadi sebelum David mengoyak sehingga direktori CS50 kita boleh mencari 34 00:02:34,360 --> 00:02:40,450 corak di mana kita mempunyai kurungan maka 3 nombor kemudian berakhir kurungan, 35 00:02:40,450 --> 00:02:44,070 3 lagi nombor, sengkang, 2 nombor, dan kemudian 54. 36 00:02:44,070 --> 00:02:48,310 Dan yang akan menjadi asasnya bagaimana kita datang dengan ungkapan biasa untuk mencari itu. 37 00:02:49,150 --> 00:02:52,960 >> Jadi ada - kita telah melakukan beberapa perkara dalam CS50 yang sedikit seperti 38 00:02:52,960 --> 00:02:59,740 ungkapan biasa, maka - sebagai contoh - dalam fail dictionary.C 39 00:02:59,740 --> 00:03:04,720 untuk periksa ejaan set masalah yang anda mungkin telah digunakan fscanf 40 00:03:04,720 --> 00:03:07,930 untuk membaca dalam satu perkataan daripada kamus. 41 00:03:07,930 --> 00:03:16,240 Dan anda boleh lihat 45s peratusan sedang mencari rentetan 45 aksara. 42 00:03:16,240 --> 00:03:20,020 Jadi ia adalah agak seperti ungkapan biasa asas. 43 00:03:21,150 --> 00:03:26,060 Dan anda boleh mempunyai 45 watak-watak yang sesuai dengan rang undang-undang di sana 44 00:03:26,060 --> 00:03:28,080 dan memilih mereka sehingga. 45 00:03:28,080 --> 00:03:33,480 Dan kemudian contoh kedua paling terkini web masalah pengaturcaraan 46 00:03:33,480 --> 00:03:40,760 ditetapkan dalam kod php distro untuk kita sebenarnya mempunyai ungkapan tetap mudah. 47 00:03:40,760 --> 00:03:46,790 Dan yang satu ini hanya semata-mata mencari untuk memeriksa jika laman web yang diluluskan pada 48 00:03:46,790 --> 00:03:51,940 sepadan login sama ada atau logout mendaftar. PHP. 49 00:03:52,220 --> 00:03:57,910 Dan kemudian kembali benar atau palsu berdasarkan yang hampir sama ungkapan biasa. 50 00:03:59,400 --> 00:04:01,740 >> Oleh itu, apabila anda menggunakan ungkapan biasa? 51 00:04:01,740 --> 00:04:04,820 Mengapa anda di sini hari ini? 52 00:04:05,330 --> 00:04:08,480 Jadi anda tidak mahu menggunakan ungkapan biasa apabila ada sesuatu yang 53 00:04:08,480 --> 00:04:11,640 melakukan kerja untuk anda lebih mudah. 54 00:04:11,640 --> 00:04:15,510 Jadi XML dan HTML sebenarnya agak sukar 55 00:04:15,510 --> 00:04:18,480 untuk menulis ungkapan biasa untuk seperti yang akan kita lihat dalam sedikit. 56 00:04:19,110 --> 00:04:23,280 Jadi terdapat parsers khusus untuk bahasa-bahasa tersebut. 57 00:04:24,170 --> 00:04:30,060 Anda juga perlu okay dengan kira perdagangan dan ketepatan kerap. 58 00:04:30,060 --> 00:04:36,220 Jika anda cuba - jadi kita menyaksikan ungkapan biasa untuk alamat e-mel, 59 00:04:37,370 --> 00:04:42,590 tetapi mengatakan anda mahu alamat emel yang tertentu dan secara beransur-ansur 60 00:04:42,590 --> 00:04:48,570 ungkapan biasa mungkin menjadi lebih kompleks kerana ia menjadi lebih tepat. 61 00:04:49,580 --> 00:04:52,260 Jadi yang akan menjadi satu perdagangan luar. 62 00:04:52,260 --> 00:04:55,330 Anda perlu memastikan bahawa anda membuat okay dengan ungkapan biasa. 63 00:04:55,330 --> 00:04:57,920 Jika anda tahu apa yang anda sedang mencari ia mungkin lebih masuk akal 64 00:04:57,920 --> 00:05:02,070 untuk dimasukkan ke dalam masa dan menulis penghurai yang lebih berkesan. 65 00:05:02,070 --> 00:05:06,980 Dan akhirnya terdapat isu sejarah dengan kekerapan 66 00:05:06,980 --> 00:05:08,940 ungkapan dan bahasa. 67 00:05:08,940 --> 00:05:12,960 Ungkapan biasa sebenarnya lebih berkuasa daripada 68 00:05:12,960 --> 00:05:16,450 ungkapan yang tetap setiap mengatakan dalam erti kata yang formal. 69 00:05:17,130 --> 00:05:20,150 >> Jadi, saya tidak mahu pergi terlalu jauh ke dalam teori formal, 70 00:05:20,150 --> 00:05:24,000 tetapi kebanyakan bahasa yang kita kod dalam sebenarnya tidak biasa. 71 00:05:24,000 --> 00:05:29,110 Dan ini adalah mengapa ungkapan biasa kadang-kadang tidak semua yang dianggap selamat. 72 00:05:29,670 --> 00:05:33,150 Jadi, pada asasnya terdapat hierarki Chomsky untuk bahasa, 73 00:05:33,150 --> 00:05:38,400 dan ungkapan yang tetap membina menggunakan kesatuan, dinamika, 74 00:05:38,400 --> 00:05:41,810 dan operasi bintang Kleene yang kita lihat dalam beberapa minit. 75 00:05:43,130 --> 00:05:48,860 Jika anda berminat dalam teori terdapat cukup banyak berlaku di sana di bawah hood. 76 00:05:50,360 --> 00:05:55,880 >> Jadi sejarah ringkas - hanya untuk konteks di sini - set biasa datang 77 00:05:55,880 --> 00:05:59,580 pada tahun 1950, dan kemudian kita mempunyai editor mudah yang 78 00:05:59,580 --> 00:06:03,300 diperbadankan ungkapan biasa - hanya mencari tali. 79 00:06:03,570 --> 00:06:09,110 Grep - yang adalah alat baris arahan - adalah salah satu yang pertama 80 00:06:09,110 --> 00:06:14,160 alat yang sangat popular yang menggabungkan ungkapan biasa pada 1960-an. 81 00:06:14,160 --> 00:06:20,560 Dalam tahun 80-an, Perl dibina - adalah bahasa pengaturcaraan yang 82 00:06:20,560 --> 00:06:24,110 menggabungkan ungkapan biasa yang sangat jelas. 83 00:06:24,550 --> 00:06:30,130 Dan kemudian baru-baru ini kita mempunyai ungkapan Perl tetap serasi 84 00:06:30,130 --> 00:06:35,870 protokol pada dasarnya dalam bahasa-bahasa lain yang menggunakan banyak sintaks yang sama. 85 00:06:36,630 --> 00:06:39,840 Sudah tentu peristiwa yang paling penting adalah pada tahun 2008 86 00:06:39,840 --> 00:06:43,040 di mana terdapat adalah yang pertama Hari Ungkapan Biasa Negara, 87 00:06:43,040 --> 00:06:47,350 yang saya percaya adalah 1 Jun jika anda mahu untuk meraikan itu. 88 00:06:48,430 --> 00:06:50,840 >> Teori Sekali lagi, hanya lebih sedikit di sini. 89 00:06:52,180 --> 00:06:55,320 Jadi terdapat beberapa cara yang berbeza untuk membina ungkapan biasa. 90 00:06:55,950 --> 00:07:02,050 Satu cara mudah adalah untuk membina ungkapan bahawa anda akan 91 00:07:02,050 --> 00:07:07,500 berjalan pada tali mentafsir - pada dasarnya membina sebuah mini-program kecil yang 92 00:07:07,500 --> 00:07:11,870 akan menganalisis keping rentetan dan lihat, "Oh, adakah ini patut ungkapan biasa atau tidak?" 93 00:07:12,250 --> 00:07:14,250 Dan kemudian berjalan itu. 94 00:07:14,250 --> 00:07:17,300 Jadi, jika anda mempunyai ungkapan biasa yang sangat kecil, ini mungkin 95 00:07:17,300 --> 00:07:19,380 cara yang paling berkesan untuk melakukannya. 96 00:07:20,090 --> 00:07:25,420 Dan kemudian jika anda - satu lagi pilihan adalah untuk menjaga membina semula 97 00:07:25,420 --> 00:07:30,260 ungkapan seperti anda pergi, dan itu adalah kemungkinan Simulasikan. 98 00:07:30,440 --> 00:07:37,690 Dan ini percubaan awal di algoritma ungkapan biasa adalah 99 00:07:37,690 --> 00:07:44,330 agak mudah dan agak cepat, tetapi tidak mempunyai banyak fleksibiliti. 100 00:07:44,330 --> 00:07:47,500 Untuk berbuat demikian juga beberapa perkara yang kita akan melihat 101 00:07:47,500 --> 00:07:52,860 hari ini kita telah terpaksa melakukan ungkapan biasa yang lebih kompleks 102 00:07:52,860 --> 00:07:56,650 pelaksanaan yang mungkin lebih perlahan, maka itu adalah sesuatu yang perlu diingati 103 00:07:57,510 --> 00:08:02,920 Terdapat juga ungkapan penafian biasa pelbagai serangan 104 00:08:02,920 --> 00:08:08,330 yang mengeksploitasi potensi bagi pelaksanaan baru 105 00:08:08,330 --> 00:08:10,930 ungkapan biasa untuk menjadi sangat kompleks. 106 00:08:11,570 --> 00:08:15,650 Dan dalam banyak erti kata yang sama yang kita lihat dalam serangan buffer overflow, 107 00:08:15,650 --> 00:08:21,610 anda mempunyai serangan yang bekerja dengan membuat gelung rekursi yang 108 00:08:21,610 --> 00:08:24,400 ditakluki kapasiti ingatan. 109 00:08:24,780 --> 00:08:29,540 Dan dengan cara ini Regexen adalah salah satu bentuk jamak rasmi ungkapan biasa 110 00:08:29,540 --> 00:08:32,890 oleh analogi kepada lembu dalam Anglo-Saxon. 111 00:08:33,500 --> 00:08:40,169 >> Okay, jadi Perpustakaan Python banyak daripada anda di sini secara peribadi mempunyai Mac, 112 00:08:40,169 --> 00:08:43,860 supaya anda benar-benar boleh menarik ini di skrin anda. 113 00:08:43,860 --> 00:08:47,480 Ungkapan biasa dibina ke dalam Python. 114 00:08:48,070 --> 00:08:53,020 Dan sebagainya Python pramuat pada Mac dan juga boleh didapati secara online di pautan ini. 115 00:08:53,770 --> 00:08:57,350 Jadi, jika anda menonton anda boleh berhenti dan pastikan anda mempunyai Python 116 00:08:58,080 --> 00:09:00,170 seperti yang kita bermain-main di sini. 117 00:09:00,780 --> 00:09:06,420 Terdapat talian manual, jadi jika anda hanya perlu menaip Python ke dalam komputer anda 118 00:09:06,420 --> 00:09:10,500 anda akan melihat bahawa versi datang dalam terminal. 119 00:09:11,070 --> 00:09:17,720 Jadi saya disediakan pautan kepada pengguna untuk Versi 2 Python serta lembaran menipu. 120 00:09:17,720 --> 00:09:23,100 Terdapat Versi 3 Python, tetapi Mac anda tidak semestinya 121 00:09:23,100 --> 00:09:25,130 datang dengan pramuat. 122 00:09:25,130 --> 00:09:27,360 Jadi tidak terlalu berbeza. 123 00:09:27,360 --> 00:09:33,270 Okay, jadi beberapa asas-asas menggunakan ungkapan biasa dalam Python. 124 00:09:34,080 --> 00:09:42,650 >> Jadi di sini saya menggunakan ungkapan yang sangat mudah, jadi saya lakukan Python import semula 125 00:09:43,750 --> 00:09:47,070 dan kemudian mengambil keputusan re.search. 126 00:09:47,070 --> 00:09:49,910 Dan carian mengambil masa 2 hujah. 127 00:09:49,910 --> 00:09:56,040 Yang pertama adalah ungkapan biasa, dan yang kedua adalah teks 128 00:09:56,040 --> 00:09:58,290 atau tali anda mahu untuk menganalisis. 129 00:09:58,290 --> 00:10:01,210 Dan kemudian saya dicetak result.group itu. 130 00:10:01,580 --> 00:10:05,860 Jadi ini adalah 2 fungsi asas kita akan lihat hari ini 131 00:10:06,790 --> 00:10:10,170 dalam pembelajaran tentang ungkapan biasa. 132 00:10:10,170 --> 00:10:12,880 Jadi hanya mogok ungkapan biasa ini di sini 133 00:10:12,880 --> 00:10:21,770 h dan kemudian \ w dan kemudian m jadi \ w hanya menerima apa-apa sifat abjad di sana. 134 00:10:21,850 --> 00:10:26,820 Jadi di sini kita mencari "h" dan kemudian yang lain watak abjad 135 00:10:26,820 --> 00:10:30,060 dan kemudian m, jadi di sini yang akan sepadan dengan ham 136 00:10:30,060 --> 00:10:34,480 dalam, "Abraham Lincoln dan ham sandwich." 137 00:10:35,040 --> 00:10:37,150 Ini adalah hasil daripada kumpulan itu. 138 00:10:37,680 --> 00:10:43,130 Satu lagi perkara yang kita boleh lakukan ialah menggunakan tali sebelum kami teks dalam Python. 139 00:10:43,130 --> 00:10:46,220 Jadi saya rasa saya akan pergi ke hadapan dan tarik yang di sini. 140 00:10:46,220 --> 00:10:49,210 Python import semula. 141 00:10:50,070 --> 00:10:54,000 Dan jika saya melakukan perkara yang sama - marilah kita mengatakan teks, 142 00:10:55,390 --> 00:11:00,800 "Abraham," mari kita zoom - ada kita pergi. 143 00:11:01,610 --> 00:11:06,430 Teks, "Abraham makan ham." 144 00:11:07,460 --> 00:11:15,260 Okay, dan kemudian menyebabkan = re.search. 145 00:11:16,260 --> 00:11:22,020 Dan kemudian ungkapan kita boleh h, dan kemudian saya akan melakukan dot m. 146 00:11:22,020 --> 00:11:26,280 Jadi titik hanya mengambil apa-apa sifat yang tidak barisan baru termasuk nombor, 147 00:11:26,280 --> 00:11:28,650 tanda-tanda peratus, apa-apa seperti itu. 148 00:11:28,650 --> 00:11:38,030 Dan kemudian teks - ledakan - dan kemudian result.group--ya. 149 00:11:38,030 --> 00:11:41,820 Jadi yang hanya bagaimana untuk melaksanakan fungsi asas di sini. 150 00:11:42,300 --> 00:11:55,110 Jika kita mempunyai cincin teks yang - bahawa teks gila - termasuk mengatakan banyak garis condong kembali 151 00:11:55,110 --> 00:12:01,180 dan tali di dalam dan perkara-perkara yang boleh kelihatan seperti urutan melarikan diri, 152 00:12:01,180 --> 00:12:08,480 maka kita mungkin mahu menggunakan input teks mentah untuk memastikan bahawa diterima. 153 00:12:08,480 --> 00:12:14,120 Dan itu hanya kelihatan seperti itu. 154 00:12:14,120 --> 00:12:17,810 Jadi, jika kita sedang mencari setiap daripada mereka di sana kita tidak perlu mencari apa-apa. 155 00:12:19,070 --> 00:12:21,680 Tetapi itu adalah bagaimana anda akan melaksanakannya; sebelum rentetan 156 00:12:21,680 --> 00:12:24,990 ungkapan biasa anda meletakkan r surat. 157 00:12:26,150 --> 00:12:30,260 >> Okay, jadi marilah kita terus. 158 00:12:30,260 --> 00:12:33,730 Baiklah - jadi mari kita lihat beberapa pola yang berulang-ulang di sini. 159 00:12:34,750 --> 00:12:39,150 Jadi satu perkara yang anda mahu lakukan adalah mengulangi perkara 160 00:12:40,040 --> 00:12:42,480 kerana anda mencari melalui teks. 161 00:12:42,480 --> 00:12:48,300 Jadi untuk melakukan diikuti oleh apa-apa bilangan b - anda lakukan ab *. 162 00:12:48,630 --> 00:12:51,620 Dan kemudian terdapat beberapa peraturan lain juga. 163 00:12:51,620 --> 00:12:54,380 Dan anda boleh melihat semua sehingga ini, saya hanya akan dijalankan melalui beberapa 164 00:12:54,380 --> 00:12:57,630 yang paling biasa digunakan orang. 165 00:12:57,630 --> 00:13:03,920 Jadi ab + adalah diikuti oleh mana-mana N lebih besar daripada 0 daripada b. 166 00:13:04,510 --> 00:13:08,000 ab? adalah diikuti dengan 0 atau 1 b. 167 00:13:09,190 --> 00:13:18,580 ab {N} adalah diikuti oleh N b, dan kemudian sebagainya. 168 00:13:18,580 --> 00:13:22,820 Jika anda mempunyai 2 nombor dalam pendakap kerinting anda menyatakan pelbagai 169 00:13:23,300 --> 00:13:25,440 yang boleh mungkin dipadankan. 170 00:13:26,390 --> 00:13:30,420 Oleh itu, kita akan kelihatan lebih di beberapa corak berulang-ulang dalam satu minit. 171 00:13:31,960 --> 00:13:42,300 Jadi 2 perkara yang perlu diingat apabila menggunakan corak yang hampir sama alat di sini. 172 00:13:42,300 --> 00:13:52,120 Jadi katakan kita mahu melihat hm daripada, "Abraham Lincoln membuat sandwich ham." 173 00:13:52,120 --> 00:13:55,230 Jadi saya menukar nama Abraham Lincoln kepada Abraham. 174 00:13:55,230 --> 00:14:00,290 Dan sekarang kita mencari apa yang dipulangkan oleh fungsi carian ini, 175 00:14:00,290 --> 00:14:03,270 dan ia hanya mengembalikan ham dalam kes ini. 176 00:14:03,620 --> 00:14:08,080 Dan ia kerana carian hanya secara semula jadi mengambil barisan paling kiri. 177 00:14:08,080 --> 00:14:12,130 Dan semua ungkapan biasa melainkan anda menyatakan sebaliknya akan berbuat demikian. 178 00:14:12,830 --> 00:14:18,880 Jika kita mahu mencari semua ada fungsi untuk itu - mencari semua. 179 00:14:18,880 --> 00:14:35,100 Jadi yang hanya boleh kelihatan seperti semua = re.findall ('h.m, teks) 180 00:14:35,100 --> 00:14:44,540 dan kemudian all.group (). 181 00:14:44,540 --> 00:14:51,040 Semua menghasilkan kedua-dua ham dan ham, dalam kes ini kedua-dua tali dalam Abraham setiap ham. 182 00:14:51,610 --> 00:14:55,110 Jadi itu adalah pilihan yang lain. 183 00:14:56,250 --> 00:15:06,940 >> Besar. Perkara lain yang perlu diingat adalah bahawa ungkapan biasa mengambil terbesar intuitif. 184 00:15:06,940 --> 00:15:09,520 Mari kita lihat contoh ini. 185 00:15:10,200 --> 00:15:16,070 Kami melakukan bahawa carian paling kiri di sini, dan kemudian saya cuba carian yang lebih besar 186 00:15:16,070 --> 00:15:18,800 menggunakan operator bintang Kleene. 187 00:15:18,800 --> 00:15:24,180 Jadi bagi, "Abraham Lincoln membuat sandwich ham," dan saya hanya mendapat kembali 188 00:15:24,180 --> 00:15:26,280 m sebagai hasilnya. 189 00:15:26,280 --> 00:15:31,670 Sebab kesilapan itu adalah bahawa saya akan dapat mengambil apa-apa bilangan 190 00:15:31,670 --> 00:15:36,140 h kerana saya tidak menyatakan apa-apa untuk pergi di antara h dan m. 191 00:15:36,140 --> 00:15:42,010 Satu-satunya contoh ada yang mempunyai m - satu-satunya contoh di sana dengan m di dalamnya 192 00:15:42,010 --> 00:15:46,220 dan apa-apa bilangan h itu hanya rentetan m. 193 00:15:46,490 --> 00:15:51,850 Kemudian saya cuba sekali lagi, saya berkata, "Baiklah, mari kita mendapat sebenar kumpulan terbesar di sini." 194 00:15:51,850 --> 00:15:59,670 Dan kemudian saya h. * M, supaya hanya mengembalikan apa-apa bilangan huruf di antara h dan m. 195 00:16:00,280 --> 00:16:02,950 Dan jika anda baru bermula dan berfikir, "Oh, okay, dan ini akan 196 00:16:02,950 --> 00:16:11,560 mendapatkan saya ham, "ia sebenarnya mengambil segala-galanya daripada h dalam Abraham Lincoln 197 00:16:11,560 --> 00:16:13,690 sepanjang jalan sehingga ke akhir ham. 198 00:16:14,040 --> 00:16:18,110 Ia adalah tamak, ia melihat h - semua ini teks lain - m, 199 00:16:18,110 --> 00:16:21,280 dan itu adalah apa yang diperlukan masuk 200 00:16:22,060 --> 00:16:27,480 Ini adalah terutamanya mengerikan - ini adalah ciri-ciri yang kita juga boleh 201 00:16:27,480 --> 00:16:30,670 nyatakan kerana ia tidak menjadi tamak menggunakan fungsi-fungsi lain. 202 00:16:31,480 --> 00:16:34,490 Tetapi ini adalah sesuatu yang kita perlu ingat terutamanya 203 00:16:34,490 --> 00:16:38,720 apabila melihat teks HTML, yang merupakan salah satu sebab-sebab yang 204 00:16:38,720 --> 00:16:41,500 ungkapan biasa sukar untuk HTML. 205 00:16:42,460 --> 00:16:46,310 Kerana jika anda mempunyai tag HTML terbuka dan kemudian banyak barangan di tengah-tengah 206 00:16:46,310 --> 00:16:49,820 dan kemudian beberapa HTML yang lain ditutup tag lama kemudian dalam program ini, 207 00:16:49,820 --> 00:16:55,420 anda baru sahaja dimakan banyak kod HTML anda mungkin dengan tidak sengaja. 208 00:16:56,200 --> 00:17:01,840 >> Baiklah - watak-watak jadi lebih istimewa, seperti banyak bahasa lain, 209 00:17:01,840 --> 00:17:04,780 kami melarikan diri menggunakan palang itu. 210 00:17:04,780 --> 00:17:10,329 Oleh itu, kita boleh menggunakan titik untuk menentukan apa-apa sifat kecuali barisan baru. 211 00:17:10,329 --> 00:17:14,550 Kita boleh menggunakan melarikan diri w untuk menentukan apa-apa sifat abjad. 212 00:17:14,550 --> 00:17:20,329 Dan dengan melarikan diri analogi d bagi mana-mana integer - watak berangka. 213 00:17:20,630 --> 00:17:27,440 Kita boleh menentukan - kita boleh menggunakan kurungan untuk menentukan ungkapan yang berkaitan. 214 00:17:27,440 --> 00:17:30,970 Jadi ini akan menerima a, b, atau c. 215 00:17:31,320 --> 00:17:37,000 Dan kita juga boleh menentukan atau opsyen untuk sama ada atau b. 216 00:17:37,000 --> 00:17:41,110 Sebagai contoh - jika kita mencari pelbagai kemungkinan 217 00:17:41,110 --> 00:17:44,940 dalam kurungan kita boleh menggunakan pengendali atau seperti dalam - 218 00:17:44,940 --> 00:17:52,480 jadi mari kita kembali kepada contoh ini di sini. 219 00:17:53,000 --> 00:17:59,790 Dan sekarang mari kita - marilah kita kembali kepada contoh ini di sini, dan kemudian 220 00:17:59,790 --> 00:18:12,290 mengambil ae - jadi ini perlu kembali - Saya rasa ini masih Abraham. 221 00:18:12,290 --> 00:18:17,410 Jadi ini - jika kita melakukan semua - besar. 222 00:18:17,410 --> 00:18:22,700 Jadi, marilah kita mengemaskini teks di sini. 223 00:18:22,700 --> 00:18:34,690 "Abraham makan ham manakala pengetam beliau -. Manakala hemming" Besar. 224 00:18:44,090 --> 00:18:47,330 Semua. Besar. Sekarang kita mendapat ham, ham, dan hem. 225 00:18:48,510 --> 00:18:59,370 Walaupun hemming - sementara bersenandung kepadanya - sementara bersenandung untuk mengepung dia. Besar. 226 00:19:00,350 --> 00:19:03,250 Perkara yang sama. 227 00:19:03,820 --> 00:19:09,180 Sekarang semua kembali masih hanya ham, ham, dan mengepung tanpa memilih sehingga pada hum atau dia. 228 00:19:09,940 --> 00:19:22,600 Great - jadi apa jika kita mahu melihat sama ada itu - supaya kita boleh juga melakukan 229 00:19:23,510 --> 00:19:33,810 dia atau - kita akan kembali kepada itu. 230 00:19:34,810 --> 00:19:45,760 Okay - jadi - semua betul - dalam kedudukan anda boleh juga menggunakan tanda sisipan atau tanda dolar 231 00:19:45,760 --> 00:19:49,350 untuk menentukan bahawa anda mencari sesuatu yang pada permulaan atau akhir rentetan. 232 00:19:50,260 --> 00:19:52,260 Atau permulaan atau akhir perkataan. 233 00:19:52,400 --> 00:19:54,470 Itu adalah salah satu cara untuk menggunakan itu. 234 00:19:55,630 --> 00:20:01,160 >> Okay - jadi marilah kita bermain-main dengan blok yang lebih besar sedikit teks. 235 00:20:03,950 --> 00:20:08,310 Mari kita katakan baris ini di sini - kenyataan ini di sini. 236 00:20:08,310 --> 00:20:11,360 Kuasa ungkapan biasa adalah bahawa mereka boleh menentukan corak 237 00:20:11,360 --> 00:20:13,390 bukan hanya ditetapkan watak. 238 00:20:14,900 --> 00:20:18,790 Marilah kita membuat - marilah kita panggil blok ini. 239 00:20:22,400 --> 00:20:27,110 Kemudian kita akan membaca semua yang masuk 240 00:20:28,890 --> 00:20:50,820 Dan kemudian mempunyai - marilah kita membuat semua =, maka apakah beberapa perkara yang kita boleh mencari di sini menguntungkan? 241 00:20:50,820 --> 00:20:54,070 Kita boleh mencari telinga bersuara. 242 00:20:55,050 --> 00:21:01,520 Tidak sangat menarik. Bagaimana pula itu? Kita akan lihat apa yang berlaku. 243 00:21:03,710 --> 00:21:05,710 Saya berikan masalah. 244 00:21:06,380 --> 00:21:10,750 Jadi apa-apa beberapa perkara sebelum semula dan semua. 245 00:21:10,750 --> 00:21:15,630 Jadi yang perlu kembali segala-galanya dari awal sehingga semua semula mungkin satu atau dua kali. 246 00:21:18,800 --> 00:21:21,970 Dan kemudian di sini kita mempunyai kuasa ungkapan biasa adalah bahawa mereka 247 00:21:21,970 --> 00:21:24,900 boleh menentukan corak bukan sahaja watak-watak di sini. 248 00:21:24,900 --> 00:21:28,510 Jadi semua jalan sehingga semula akhir, ia bermula dengan yang paling kiri dan adalah tamak. 249 00:21:30,710 --> 00:21:32,710 Mari kita lihat - apa lagi yang kita boleh mencari. 250 00:21:32,710 --> 00:21:39,860 Saya rasa satu perkara jika anda berminat untuk mencari kata ganti nama dia dan dia, 251 00:21:39,860 --> 00:21:44,600 anda boleh menyemak untuk s yang sama dengan 0 atau 1 252 00:21:44,600 --> 00:21:49,710 dan ungkapan beliau, dan mungkin tidak akan kembali - 253 00:21:49,710 --> 00:21:58,020 oh, saya rasa ia kembali dia kerana kita melihat kuasa, hari itu, di sini. 254 00:22:00,590 --> 00:22:06,270 Mari kita cuba menyatakan bahawa ini telah datang pada permulaan sesuatu. 255 00:22:06,640 --> 00:22:09,530 Mari kita lihat jika yang jatuh di luar. 256 00:22:09,530 --> 00:22:19,630 Oleh itu, kita boleh melakukan lemak, dan di sana kita tidak mendapat apa-apa kerana dia dan dia 257 00:22:19,630 --> 00:22:22,870 tidak berlaku dalam frasa ini. 258 00:22:24,960 --> 00:22:30,410 Besar. Okay - supaya kembali kepada kucing di sini. 259 00:22:30,410 --> 00:22:35,720 Corak begitu kompleks mencederakan otak. 260 00:22:35,720 --> 00:22:40,500 Jadi itulah sebabnya kita menggunakan ungkapan biasa untuk mengelakkan isu-isu ini. 261 00:22:40,820 --> 00:22:43,520 >> Jadi di sini adalah beberapa cara lain yang berguna anda boleh bermain-main dengan. 262 00:22:43,520 --> 00:22:50,290 Kita melihat carian hari ini, tetapi anda juga boleh menggunakan perlawanan, perpecahan, findall, dan kumpulan. 263 00:22:50,290 --> 00:22:53,970 Jadi perkara yang sejuk lain yang anda boleh lakukan dengan ungkapan biasa selain hanya 264 00:22:53,970 --> 00:22:58,870 mencari corak mengambil corak dan memegang semua perlawanan - 265 00:22:58,870 --> 00:23:02,530 pembolehubah - dan kemudian menggunakan mereka dalam kod anda di kemudian hari. 266 00:23:02,850 --> 00:23:05,980 Yang boleh agak membantu. Perkara-perkara lain boleh mengira. 267 00:23:05,980 --> 00:23:11,720 Jadi kita boleh mengira bilangan contoh corak ungkapan biasa, 268 00:23:11,720 --> 00:23:13,960 dan itu adalah apa yang kita boleh menggunakan kumpulan untuk. 269 00:23:13,960 --> 00:23:17,550 Dan kaedah lain juga juga mungkin. 270 00:23:18,040 --> 00:23:22,980 Jadi saya hanya mahu bercakap sedikit lebih lanjut mengenai cara-cara lain yang anda boleh menggunakan ungkapan-ungkapan yang tetap. 271 00:23:22,980 --> 00:23:29,100 >> Jadi, satu permohonan yang lebih maju dalam padanan kabur. 272 00:23:29,100 --> 00:23:33,450 Jadi, jika anda mencari teks untuk ungkapan, Julius Caesar, 273 00:23:33,450 --> 00:23:37,740 dan anda melihat sama ada Gaius Julius Caesar atau nama Julius Caesar dalam bahasa lain, 274 00:23:37,740 --> 00:23:44,400 maka anda juga mungkin mahu untuk memberikan beberapa berat kepada nilai. 275 00:23:44,400 --> 00:23:48,930 Dan jika ia cukup dekat - jika ia melintasi ambang tertentu - maka anda mahu 276 00:23:48,930 --> 00:23:50,860 dapat menerima Julius Caesar. 277 00:23:50,860 --> 00:24:00,580 Jadi terdapat beberapa pelaksanaan yang berbeza untuk itu dalam beberapa bahasa-bahasa lain juga. 278 00:24:02,580 --> 00:24:08,420 Berikut adalah beberapa alat lain, regex Pal - aplikasi sedikit berguna dalam talian untuk 279 00:24:08,420 --> 00:24:12,190 memeriksa jika ungkapan biasa anda terdiri betul. 280 00:24:12,190 --> 00:24:18,500 Terdapat juga alat-alat yang berdiri sendiri yang anda boleh menjalankan dari desktop anda 281 00:24:18,500 --> 00:24:22,100 seperti Pico Ultra, dan juga buku masakan adil. 282 00:24:22,100 --> 00:24:25,410 Jadi, jika anda sedang melakukan satu projek yang melibatkan tan ungkapan biasa 283 00:24:25,410 --> 00:24:29,810 ini mungkin tempat untuk pergi di luar skop hari ini. 284 00:24:31,520 --> 00:24:35,770 Dan kemudian hanya untuk memberi anda rasa cara biasa ia adalah 285 00:24:35,770 --> 00:24:44,090 terdapat grep dalam Unix, Perl mempunyai terbina dalam, dan C ada PCRE untuk C. 286 00:24:44,090 --> 00:24:48,890 Dan kemudian semua bahasa-bahasa lain juga mempunyai pakej ungkapan biasa 287 00:24:48,890 --> 00:24:52,020 yang beroperasi dengan dasarnya sintaks yang sama kita mendapat rasa hari ini. 288 00:24:52,020 --> 00:24:54,790 PHP, Java, Ruby, dan sebagainya. 289 00:24:56,080 --> 00:24:58,980 >> Kod Google Search sebenarnya adalah bernilai menyebut, ia adalah salah satu daripada 290 00:24:58,980 --> 00:25:05,720 agak beberapa aplikasi di luar sana yang membolehkan orang ramai untuk mengakses 291 00:25:05,720 --> 00:25:07,800 pangkalan data dengan menggunakan ungkapan-ungkapan yang tetap. 292 00:25:07,800 --> 00:25:12,920 Jadi, jika anda melihat di Search Kod Google, anda boleh mencari kod 293 00:25:12,920 --> 00:25:16,880 jika anda sedang mencari contoh bagaimana fungsi boleh digunakan, 294 00:25:16,880 --> 00:25:21,610 anda boleh menggunakan ungkapan biasa untuk mendapati bahawa fungsi yang digunakan dalam pelbagai kes-kes yang berbeza. 295 00:25:21,610 --> 00:25:28,000 Anda boleh mencari fwrite, dan kemudian anda boleh mencari bendera menulis atau membaca 296 00:25:28,000 --> 00:25:32,000 jika anda mahu satu contoh fwrite digunakan dalam kes itu. 297 00:25:33,530 --> 00:25:37,010 Jadi perkara yang sama di sana, dan di sini adalah beberapa rujukan. 298 00:25:37,010 --> 00:25:40,990 Ini akan menjadi boleh didapati dalam talian juga, jadi pergi ke hadapan jika 299 00:25:40,990 --> 00:25:45,560 anda mahu melihat Python, grep, Perl - anda hanya ingin mendapatkan beberapa inspirasi 300 00:25:45,560 --> 00:25:50,650 atau jika anda mahu melihat lebih pada teori di sini adalah beberapa melompat baik di luar tempat. 301 00:25:50,650 --> 00:25:53,870 Thank you very much. 302 00:25:58,470 --> 00:25:59,910 [CS50.TV]