1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Seminar: Pola Matching dengan Regular Expressions] 2 00:00:02,000 --> 00:00:04,000 [John Mussman-Universitas Harvard] 3 00:00:04,000 --> 00:00:07,220 [Ini adalah CS50.-CS50.TV] 4 00:00:07,780 --> 00:00:11,610 Oke. Nah, menyambut semua orang. Ini adalah CS50 2012. 5 00:00:11,780 --> 00:00:16,610 Nama saya John, dan saya akan berbicara hari ini tentang ekspresi reguler. 6 00:00:16,610 --> 00:00:22,530 Kalimat biasa terutama alat, tetapi juga kadang-kadang digunakan 7 00:00:22,530 --> 00:00:28,650 dalam kode aktif pada dasarnya mencocokkan pola dan string. 8 00:00:28,650 --> 00:00:33,800 Jadi, inilah komik web dari xkcd. 9 00:00:34,440 --> 00:00:42,370 Dalam komik ini ada misteri pembunuhan di mana si pembunuh memiliki 10 00:00:42,370 --> 00:00:47,860 diikuti seseorang berlibur, dan protagonis harus 11 00:00:47,860 --> 00:00:52,500 mencari melalui 200 megabyte email mencari alamat. 12 00:00:52,500 --> 00:00:56,090 Dan mereka akan menyerah ketika seseorang yang tahu ekspresi reguler - 13 00:00:56,090 --> 00:01:00,550 mungkin superhero - menyapu ke bawah dan menulis beberapa kode 14 00:01:00,550 --> 00:01:02,970 dan memecahkan misteri pembunuhan. 15 00:01:02,970 --> 00:01:07,370 Jadi mungkin yang akan menjadi sesuatu yang Anda akan diberdayakan untuk melakukan 16 00:01:07,370 --> 00:01:09,370 setelah seminar ini. 17 00:01:09,370 --> 00:01:12,250 Kami hanya akan memberikan pengenalan ringkas untuk bahasa 18 00:01:12,250 --> 00:01:16,770 dan memberi Anda cukup sarana untuk pergi setelah lebih banyak sumber daya pada Anda sendiri. 19 00:01:17,680 --> 00:01:21,700 >> Ekspresi begitu teratur terlihat pada dasarnya seperti ini. 20 00:01:22,930 --> 00:01:25,550 Ini adalah ekspresi reguler di Ruby. 21 00:01:25,550 --> 00:01:29,280 Hal ini tidak terlalu berbeda di seluruh bahasa. 22 00:01:29,690 --> 00:01:37,630 Kami memiliki hanya di garis miring untuk memulai dan menandai ekspresi reguler di Ruby. 23 00:01:37,630 --> 00:01:42,880 Dan ini adalah ekspresi reguler untuk mencari pola alamat email. 24 00:01:42,880 --> 00:01:49,160 Jadi kita melihat pada bit pertama mencari setiap karakter alfanumerik. 25 00:01:50,500 --> 00:01:54,880 Itu karena alamat email sering harus mulai dengan karakter abjad. 26 00:01:55,460 --> 00:01:59,330 Dan kemudian ada karakter khusus diikuti dengan simbol @. 27 00:01:59,330 --> 00:02:03,260 Dan kemudian hal yang sama untuk nama domain. 28 00:02:03,260 --> 00:02:10,030 Dan kemudian antara 2 dan 4 karakter untuk mencari. Com,. Bersih, dan sebagainya. 29 00:02:10,850 --> 00:02:13,200 Jadi itu adalah contoh lain dari ekspresi reguler. 30 00:02:13,200 --> 00:02:17,270 Ekspresi begitu teratur adalah protokol untuk menemukan 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 adalah menemukan semua nomor telepon berakhir pada 54 dalam sebuah direktori. 33 00:02:27,970 --> 00:02:34,360 Jadi sebelum David robekan up direktori CS50 kita bisa mencari 34 00:02:34,360 --> 00:02:40,450 pola di mana kita memiliki kurung kemudian 3 angka kemudian berakhir kurung, 35 00:02:40,450 --> 00:02:44,070 3 nomor lagi, dash, 2 nomor, dan kemudian 54. 36 00:02:44,070 --> 00:02:48,310 Dan itu akan menjadi dasarnya bagaimana kita datang dengan ekspresi reguler untuk mencari itu. 37 00:02:49,150 --> 00:02:52,960 >> Jadi ada - kami telah melakukan beberapa hal dalam CS50 yang sedikit seperti 38 00:02:52,960 --> 00:02:59,740 ekspresi reguler, sehingga - misalnya - dalam file dictionary.C 39 00:02:59,740 --> 00:03:04,720 untuk spell check masalah set Anda mungkin telah menggunakan fscanf 40 00:03:04,720 --> 00:03:07,930 untuk membaca sebuah kata dari kamus. 41 00:03:07,930 --> 00:03:16,240 Dan Anda dapat melihat 45s persentase mencari string 45 karakter. 42 00:03:16,240 --> 00:03:20,020 Jadi agak seperti ekspresi reguler dasar. 43 00:03:21,150 --> 00:03:26,060 Dan Anda dapat memiliki 45 karakter yang sesuai dengan tagihan di sana 44 00:03:26,060 --> 00:03:28,080 dan mengambil mereka. 45 00:03:28,080 --> 00:03:33,480 Dan kemudian contoh kedua dalam masalah pemrograman web terbaru 46 00:03:33,480 --> 00:03:40,760 diatur dalam distro kode untuk php kita sebenarnya memiliki ekspresi reguler sederhana. 47 00:03:40,760 --> 00:03:46,790 Dan yang satu ini hanya hanya ingin memeriksa apakah halaman web yang disahkan pada 48 00:03:46,790 --> 00:03:51,940 cocok baik masuk atau keluar dari daftar. PHP. 49 00:03:52,220 --> 00:03:57,910 Dan kemudian kembali benar atau salah didasarkan pada pencocokan ekspresi reguler. 50 00:03:59,400 --> 00:04:01,740 >> Jadi, ketika Anda menggunakan ekspresi reguler? 51 00:04:01,740 --> 00:04:04,820 Mengapa kau di sini hari ini? 52 00:04:05,330 --> 00:04:08,480 Jadi Anda tidak ingin menggunakan ekspresi reguler ketika ada sesuatu yang 53 00:04:08,480 --> 00:04:11,640 melakukan pekerjaan untuk Anda lebih mudah. 54 00:04:11,640 --> 00:04:15,510 Jadi XML dan HTML sebenarnya cukup rumit 55 00:04:15,510 --> 00:04:18,480 untuk menulis ekspresi reguler untuk seperti yang kita akan lihat dalam sedikit. 56 00:04:19,110 --> 00:04:23,280 Jadi ada parser khusus untuk bahasa-bahasa tersebut. 57 00:04:24,170 --> 00:04:30,060 Anda juga harus baik-baik saja dengan perdagangan off dan akurasi sering. 58 00:04:30,060 --> 00:04:36,220 Jika Anda mencoba - sehingga kita melihat ekspresi reguler untuk alamat email, 59 00:04:37,370 --> 00:04:42,590 tapi katakan Anda ingin alamat email tertentu dan secara bertahap 60 00:04:42,590 --> 00:04:48,570 ekspresi reguler mungkin menjadi lebih kompleks karena menjadi lebih tepat. 61 00:04:49,580 --> 00:04:52,260 Sehingga akan menjadi salah satu trade off. 62 00:04:52,260 --> 00:04:55,330 Anda harus yakin bahwa Anda baik-baik saja membuat dengan ekspresi reguler. 63 00:04:55,330 --> 00:04:57,920 Jika Anda tahu persis apa yang Anda cari untuk itu mungkin lebih masuk akal 64 00:04:57,920 --> 00:05:02,070 untuk dimasukkan ke dalam waktu dan menulis parser lebih efektif. 65 00:05:02,070 --> 00:05:06,980 Dan akhirnya ada masalah sejarah dengan keteraturan 66 00:05:06,980 --> 00:05:08,940 ekspresi dan bahasa. 67 00:05:08,940 --> 00:05:12,960 Kalimat biasa sebenarnya jauh lebih kuat daripada 68 00:05:12,960 --> 00:05:16,450 ekspresi reguler per mengatakan dalam arti formal. 69 00:05:17,130 --> 00:05:20,150 >> Jadi saya tidak ingin pergi terlalu jauh ke dalam teori formal, 70 00:05:20,150 --> 00:05:24,000 tapi kebanyakan bahasa yang kita kode sebenarnya tidak teratur. 71 00:05:24,000 --> 00:05:29,110 Dan inilah mengapa kalimat biasa terkadang tidak dianggap semua yang aman. 72 00:05:29,670 --> 00:05:33,150 Jadi pada dasarnya ada hirarki Chomsky untuk bahasa, 73 00:05:33,150 --> 00:05:38,400 dan ekspresi reguler yang membangun menggunakan serikat, Rangkaian, 74 00:05:38,400 --> 00:05:41,810 dan operasi tanda star bahwa kita akan melihat dalam beberapa menit. 75 00:05:43,130 --> 00:05:48,860 Jika Anda tertarik dalam teori ada cukup banyak terjadi di sana di bawah tenda. 76 00:05:50,360 --> 00:05:55,880 >> Jadi sejarah singkat - hanya untuk konteks di sini - set biasa datang 77 00:05:55,880 --> 00:05:59,580 pada tahun 1950, dan kemudian kami memiliki editor sederhana yang 78 00:05:59,580 --> 00:06:03,300 dimasukkan ekspresi reguler - hanya mencari string. 79 00:06:03,570 --> 00:06:09,110 Grep - yang merupakan alat baris perintah - adalah salah satu yang pertama 80 00:06:09,110 --> 00:06:14,160 alat yang sangat populer yang menggabungkan ekspresi reguler pada tahun 1960. 81 00:06:14,160 --> 00:06:20,560 Di era 80-an, Perl dibangun - adalah bahasa pemrograman yang 82 00:06:20,560 --> 00:06:24,110 menggabungkan ekspresi reguler sangat mencolok. 83 00:06:24,550 --> 00:06:30,130 Dan kemudian baru-baru kami telah Perl ekspresi reguler yang kompatibel 84 00:06:30,130 --> 00:06:35,870 protokol pada dasarnya dalam bahasa lain yang menggunakan banyak sintaks yang sama. 85 00:06:36,630 --> 00:06:39,840 Tentu saja acara yang paling penting adalah pada tahun 2008 86 00:06:39,840 --> 00:06:43,040 mana ada pertama Nasional Regular Expressions Day, 87 00:06:43,040 --> 00:06:47,350 yang saya percaya adalah 1 Juni jika Anda ingin merayakan itu. 88 00:06:48,430 --> 00:06:50,840 >> Sekali lagi, hanya sedikit lebih teori sini. 89 00:06:52,180 --> 00:06:55,320 Jadi ada beberapa cara yang berbeda beberapa membangun ekspresi reguler. 90 00:06:55,950 --> 00:07:02,050 Salah satu cara sederhana adalah untuk membangun ekspresi yang Anda akan 91 00:07:02,050 --> 00:07:07,500 berjalan di string menafsirkan - pada dasarnya membangun mini-program kecil yang 92 00:07:07,500 --> 00:07:11,870 akan menganalisis potongan string dan melihat, "Oh, apakah ini cocok dengan ekspresi reguler atau tidak?" 93 00:07:12,250 --> 00:07:14,250 Dan kemudian jalankan itu. 94 00:07:14,250 --> 00:07:17,300 Jadi jika Anda memiliki ekspresi reguler yang sangat kecil, ini mungkin 95 00:07:17,300 --> 00:07:19,380 cara yang paling efisien untuk melakukannya. 96 00:07:20,090 --> 00:07:25,420 Dan kemudian jika Anda - pilihan lain adalah untuk menjaga merekonstruksi 97 00:07:25,420 --> 00:07:30,260 ekspresi saat Anda pergi, dan itu adalah kemungkinan simulasi. 98 00:07:30,440 --> 00:07:37,690 Dan upaya awal pada algoritma ekspresi reguler yang 99 00:07:37,690 --> 00:07:44,330 relatif sederhana dan relatif cepat, tetapi tidak memiliki banyak fleksibilitas. 100 00:07:44,330 --> 00:07:47,500 Jadi untuk melakukan bahkan beberapa hal yang kita akan melihat 101 00:07:47,500 --> 00:07:52,860 hari ini kita harus melakukan ekspresi reguler lebih kompleks 102 00:07:52,860 --> 00:07:56,650 implementasi yang berpotensi jauh lebih lambat, maka itu adalah sesuatu yang perlu diingat 103 00:07:57,510 --> 00:08:02,920 Ada juga ekspresi penolakan reguler berbagai serangan 104 00:08:02,920 --> 00:08:08,330 yang mengeksploitasi potensi ini implementasi baru dari 105 00:08:08,330 --> 00:08:10,930 ekspresi reguler menjadi sangat kompleks. 106 00:08:11,570 --> 00:08:15,650 Dan dalam banyak arti yang sama yang kita lihat dalam serangan buffer overflow, 107 00:08:15,650 --> 00:08:21,610 Anda memiliki serangan yang bekerja dengan membuat loop rekursif yang 108 00:08:21,610 --> 00:08:24,400 menyerbu kapasitas memori. 109 00:08:24,780 --> 00:08:29,540 Dan omong-omong Regexen adalah salah satu bentuk jamak resmi ekspresi reguler 110 00:08:29,540 --> 00:08:32,890 dengan analogi lembu di Anglo-Saxon. 111 00:08:33,500 --> 00:08:40,169 >> Oke, jadi Perpustakaan Python banyak dari Anda di sini secara pribadi memiliki Mac, 112 00:08:40,169 --> 00:08:43,860 sehingga Anda dapat benar-benar menarik ini di layar Anda. 113 00:08:43,860 --> 00:08:47,480 Ekspresi reguler dibangun ke Python. 114 00:08:48,070 --> 00:08:53,020 Dan Python telah dimuat pada Mac dan juga tersedia secara online di link ini. 115 00:08:53,770 --> 00:08:57,350 Jadi jika Anda menonton Anda dapat menghentikan sebentar dan pastikan Anda memiliki Python 116 00:08:58,080 --> 00:09:00,170 karena kami bermain-main di sini. 117 00:09:00,780 --> 00:09:06,420 Ada online manual, jadi jika Anda hanya ketik Python ke dalam komputer Anda 118 00:09:06,420 --> 00:09:10,500 Anda akan melihat bahwa versi muncul di terminal. 119 00:09:11,070 --> 00:09:17,720 Jadi saya memberikan link ke manual untuk Versi 2 dari Python serta contekan. 120 00:09:17,720 --> 00:09:23,100 Ada Versi 3 dari Python, tapi Mac Anda tidak selalu 121 00:09:23,100 --> 00:09:25,130 datang dengan yang dimuat. 122 00:09:25,130 --> 00:09:27,360 Jadi tidak terlalu berbeda. 123 00:09:27,360 --> 00:09:33,270 Oke, sehingga beberapa dasar-dasar menggunakan ekspresi reguler di Python. 124 00:09:34,080 --> 00:09:42,650 >> Jadi di sini saya menggunakan ekspresi yang sangat sederhana, jadi saya melakukan Python import re 125 00:09:43,750 --> 00:09:47,070 dan kemudian mengambil hasil re.search. 126 00:09:47,070 --> 00:09:49,910 Dan pencarian memakan waktu 2 argumen. 127 00:09:49,910 --> 00:09:56,040 Yang pertama adalah ekspresi reguler, dan yang kedua adalah teks 128 00:09:56,040 --> 00:09:58,290 atau string yang Anda ingin menganalisis. 129 00:09:58,290 --> 00:10:01,210 Dan kemudian saya dicetak result.group tersebut. 130 00:10:01,580 --> 00:10:05,860 Jadi ini adalah 2 fungsi dasar kita akan lihat hari ini 131 00:10:06,790 --> 00:10:10,170 dalam belajar tentang ekspresi reguler. 132 00:10:10,170 --> 00:10:12,880 Jadi hanya mogok ini ekspresi reguler di sini 133 00:10:12,880 --> 00:10:21,770 jam dan kemudian \ w dan kemudian m sehingga \ w hanya menerima setiap karakter abjad di sana. 134 00:10:21,850 --> 00:10:26,820 Jadi di sini kita mencari "h" dan kemudian karakter alfabet lain 135 00:10:26,820 --> 00:10:30,060 dan kemudian m, jadi di sini yang akan cocok 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 dari kelompok itu. 138 00:10:37,680 --> 00:10:43,130 Hal lain yang bisa kita lakukan adalah menggunakan string sebelum kami teks dalam Python. 139 00:10:43,130 --> 00:10:46,220 Jadi kurasa aku akan pergi ke depan dan menarik bahwa di sini. 140 00:10:46,220 --> 00:10:49,210 Python impor kembali. 141 00:10:50,070 --> 00:10:54,000 Dan jika saya melakukan hal yang sama - katakanlah teks, 142 00:10:55,390 --> 00:11:00,800 "Abraham," mari kita memperbesar - di sana kita pergi. 143 00:11:01,610 --> 00:11:06,430 Teks, "Abraham makan ham." 144 00:11:07,460 --> 00:11:15,260 Oke, dan kemudian menghasilkan = re.search. 145 00:11:16,260 --> 00:11:22,020 Dan kemudian ekspresi kita dapat h, dan kemudian saya akan melakukan dot m. 146 00:11:22,020 --> 00:11:26,280 Jadi dot hanya membutuhkan setiap karakter yang bukan baris baru termasuk nomor, 147 00:11:26,280 --> 00:11:28,650 tanda persentase, sesuatu seperti itu. 148 00:11:28,650 --> 00:11:38,030 Dan kemudian teks - booming - dan kemudian result.group--ya. 149 00:11:38,030 --> 00:11:41,820 Jadi itu hanya bagaimana untuk melaksanakan fungsi dasar di sini. 150 00:11:42,300 --> 00:11:55,110 Jika kita memiliki sebuah cincin teks yang - bahwa teks gila - termasuk mengatakan banyak garis miring kembali 151 00:11:55,110 --> 00:12:01,180 dan string dalam dan hal-hal yang bisa terlihat seperti escape sequence, 152 00:12:01,180 --> 00:12:08,480 maka kita mungkin ingin menggunakan input teks baku untuk memastikan yang diterima. 153 00:12:08,480 --> 00:12:14,120 Dan itu hanya terlihat seperti itu. 154 00:12:14,120 --> 00:12:17,810 Jadi jika kita sedang mencari masing-masing di sana kita tidak akan menemukan apa-apa. 155 00:12:19,070 --> 00:12:21,680 Tapi itu adalah bagaimana Anda akan menerapkannya, sebelum string 156 00:12:21,680 --> 00:12:24,990 ekspresi reguler Anda meletakkan surat r. 157 00:12:26,150 --> 00:12:30,260 >> Oke, jadi mari kita terus berjalan. 158 00:12:30,260 --> 00:12:33,730 Baiklah - jadi mari kita lihat beberapa pola berulang di sini. 159 00:12:34,750 --> 00:12:39,150 Jadi satu hal yang ingin Anda lakukan adalah mengulangi hal-hal 160 00:12:40,040 --> 00:12:42,480 karena Anda mencari melalui teks. 161 00:12:42,480 --> 00:12:48,300 Jadi untuk melakukan diikuti oleh sejumlah b - Anda lakukan ab *. 162 00:12:48,630 --> 00:12:51,620 Dan kemudian ada serangkaian aturan lain juga. 163 00:12:51,620 --> 00:12:54,380 Dan Anda dapat melihat semua up ini, saya hanya akan berjalan melalui beberapa 164 00:12:54,380 --> 00:12:57,630 yang paling umum digunakan orang. 165 00:12:57,630 --> 00:13:03,920 Jadi ab + adalah diikuti oleh N lebih besar dari 0 b. 166 00:13:04,510 --> 00:13:08,000 ab? adalah diikuti oleh 0 atau 1 b. 167 00:13:09,190 --> 00:13:18,580 ab {N} adalah diikuti oleh N b, dan kemudian seterusnya. 168 00:13:18,580 --> 00:13:22,820 Jika Anda memiliki 2 nomor dalam kurung kurawal Anda menentukan kisaran 169 00:13:23,300 --> 00:13:25,440 yang dapat mungkin cocok. 170 00:13:26,390 --> 00:13:30,420 Jadi kita akan melihat lebih di beberapa pola berulang dalam satu menit. 171 00:13:31,960 --> 00:13:42,300 Jadi 2 hal yang perlu diingat ketika menggunakan alat pencocokan sini pola ini. 172 00:13:42,300 --> 00:13:52,120 Jadi katakan kita ingin melihat dari hm, "Abraham Lincoln membuat ham sandwich." 173 00:13:52,120 --> 00:13:55,230 Jadi saya mengubah nama Abraham Lincoln kepada Abraham. 174 00:13:55,230 --> 00:14:00,290 Dan sekarang kami sedang mencari apa yang dikembalikan oleh fungsi pencarian ini, 175 00:14:00,290 --> 00:14:03,270 dan hanya mengembalikan ham dalam kasus ini. 176 00:14:03,620 --> 00:14:08,080 Dan tidak itu karena pencarian hanya secara alami membutuhkan waktu yang paling antrian kiri. 177 00:14:08,080 --> 00:14:12,130 Dan semua ekspresi reguler kecuali jika Anda menentukan sebaliknya akan melakukan itu. 178 00:14:12,830 --> 00:14:18,880 Jika kita ingin menemukan semua ada fungsi untuk itu - menemukan semua. 179 00:14:18,880 --> 00:14:35,100 Sehingga bisa terlihat 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 memproduksi baik ham dan ham, dalam hal ini kedua string di setiap Abraham ham. 182 00:14:51,610 --> 00:14:55,110 Sehingga adalah pilihan lain. 183 00:14:56,250 --> 00:15:06,940 >> Besar. Hal lain yang perlu diingat adalah bahwa ekspresi reguler 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 itu sebagian besar pencari kiri di sini, dan kemudian aku mencoba pencarian yang lebih besar 186 00:15:16,070 --> 00:15:18,800 menggunakan operator tanda star. 187 00:15:18,800 --> 00:15:24,180 Jadi untuk, "Abraham Lincoln membuat ham sandwich," dan aku hanya kembali 188 00:15:24,180 --> 00:15:26,280 m sebagai hasilnya. 189 00:15:26,280 --> 00:15:31,670 Alasan untuk kesalahan itu adalah bahwa saya bisa mengambil sejumlah 190 00:15:31,670 --> 00:15:36,140 h karena saya tidak menentukan apa-apa untuk pergi di antara h dan m. 191 00:15:36,140 --> 00:15:42,010 Satu-satunya Misalnya ada yang memiliki m - satu-satunya contoh di sana dengan m di dalamnya 192 00:15:42,010 --> 00:15:46,220 dan sejumlah h itu hanya m tali. 193 00:15:46,490 --> 00:15:51,850 Kemudian saya mencoba lagi, saya berkata, "Oke, mari kita mendapatkan kelompok terbesar yang sebenarnya di sini." 194 00:15:51,850 --> 00:15:59,670 Dan kemudian aku h. * M, sehingga hanya mengembalikan jumlah karakter antara h dan m. 195 00:16:00,280 --> 00:16:02,950 Dan jika Anda baru mulai keluar dan berpikir, "Oh, oke, baik ini akan 196 00:16:02,950 --> 00:16:11,560 get me ham, "itu benar-benar mengambil segala sesuatu dari jam dalam Abraham Lincoln 197 00:16:11,560 --> 00:16:13,690 sepanjang jalan sampai ke ujung ham. 198 00:16:14,040 --> 00:16:18,110 Hal ini serakah, ia melihat h - semua ini teks lain - m, 199 00:16:18,110 --> 00:16:21,280 dan itulah yang dibutuhkan masuk 200 00:16:22,060 --> 00:16:27,480 Ini adalah sangat mengerikan - ini adalah fitur kami juga bisa 201 00:16:27,480 --> 00:16:30,670 tentukan untuk tidak menjadi serakah menggunakan fungsi lain. 202 00:16:31,480 --> 00:16:34,490 Tapi ini adalah sesuatu yang kita harus diingat terutama 203 00:16:34,490 --> 00:16:38,720 ketika melihat teks HTML, yang merupakan salah satu alasan bahwa 204 00:16:38,720 --> 00:16:41,500 ekspresi reguler sulit untuk HTML. 205 00:16:42,460 --> 00:16:46,310 Karena jika Anda memiliki tag HTML terbuka dan kemudian banyak hal di tengah 206 00:16:46,310 --> 00:16:49,820 dan kemudian beberapa lainnya ditutup HTML tag lama kemudian dalam program ini, 207 00:16:49,820 --> 00:16:55,420 Anda baru saja dimakan banyak kode HTML Anda mungkin secara tidak sengaja. 208 00:16:56,200 --> 00:17:01,840 >> Baiklah - karakter sehingga lebih khusus, seperti banyak bahasa lainnya, 209 00:17:01,840 --> 00:17:04,780 kami melarikan diri menggunakan garis miring. 210 00:17:04,780 --> 00:17:10,329 Jadi kita dapat menggunakan dot untuk menentukan karakter apapun kecuali untuk baris baru. 211 00:17:10,329 --> 00:17:14,550 Kita dapat menggunakan escape w untuk menentukan setiap karakter alfabet. 212 00:17:14,550 --> 00:17:20,329 Dan dengan analogi melarikan diri d untuk setiap bilangan bulat - karakter numerik. 213 00:17:20,630 --> 00:17:27,440 Kita dapat menentukan - kita dapat menggunakan tanda kurung untuk menentukan ekspresi terkait. 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 dapat menentukan atau pilihan untuk baik atau b. 216 00:17:37,000 --> 00:17:41,110 Misalnya - jika kita sedang mencari beberapa kemungkinan 217 00:17:41,110 --> 00:17:44,940 dalam kurung kita bisa menggunakan operator atau seperti dalam - 218 00:17:44,940 --> 00:17:52,480 jadi mari kita kembali ke contoh ini di sini. 219 00:17:53,000 --> 00:17:59,790 Dan sekarang mari kita - mari kita kembali ke contoh ini di sini, dan kemudian 220 00:17:59,790 --> 00:18:12,290 mengambil ae - jadi ini harus kembali - saya kira 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 mari kita memperbarui teks di sini. 223 00:18:22,700 --> 00:18:34,690 "Abraham makan ham sementara hemming nya -. Sementara hemming" Besar. 224 00:18:44,090 --> 00:18:47,330 Semua. Besar. Sekarang kita mendapatkan ham, ham, dan hem. 225 00:18:48,510 --> 00:18:59,370 Sementara hemming - selagi bersenandung kepadanya - saat bersenandung untuk hem dia. Besar. 226 00:19:00,350 --> 00:19:03,250 Sama saja. 227 00:19:03,820 --> 00:19:09,180 Sekarang semua kembali masih hanya ham, ham, dan hem tanpa memilih di dengung atau si dia. 228 00:19:09,940 --> 00:19:22,600 Besar - jadi apa jika kita ingin melihat baik itu - sehingga kita bisa juga melakukan 229 00:19:23,510 --> 00:19:33,810 dia atau - kita akan datang kembali untuk itu. 230 00:19:34,810 --> 00:19:45,760 Oke - jadi - baik-baik saja - dalam posisi Anda juga dapat menggunakan tanda sisipan atau tanda dolar 231 00:19:45,760 --> 00:19:49,350 untuk menentukan bahwa Anda sedang mencari sesuatu di awal atau akhir dari string. 232 00:19:50,260 --> 00:19:52,260 Atau awal atau akhir dari sebuah kata. 233 00:19:52,400 --> 00:19:54,470 Itulah salah satu cara untuk menggunakan itu. 234 00:19:55,630 --> 00:20:01,160 >> Oke - jadi mari kita bermain-main dengan blok sedikit lebih besar dari teks. 235 00:20:03,950 --> 00:20:08,310 Mari kita katakan baris ini di sini - pernyataan ini di sini. 236 00:20:08,310 --> 00:20:11,360 Kekuatan ekspresi reguler adalah bahwa mereka dapat menentukan pola 237 00:20:11,360 --> 00:20:13,390 bukan hanya tetap karakter. 238 00:20:14,900 --> 00:20:18,790 Mari kita membuat - mari kita menyebutnya blok ini. 239 00:20:22,400 --> 00:20:27,110 Kemudian kita akan membaca semua itu masuk 240 00:20:28,890 --> 00:20:50,820 Dan kemudian memiliki - mari kita membuat semua =, jadi apa adalah beberapa hal yang kita bisa mencari di sini menguntungkan? 241 00:20:50,820 --> 00:20:54,070 Kita bisa mencari telinga berekspresi. 242 00:20:55,050 --> 00:21:01,520 Tidak sangat menarik. Bagaimana tentang itu? Kita akan lihat apa yang terjadi. 243 00:21:03,710 --> 00:21:05,710 Aku memberinya masalah. 244 00:21:06,380 --> 00:21:10,750 Jadi banyak hal sebelum kembali dan semua. 245 00:21:10,750 --> 00:21:15,630 Jadi yang harus kembali semuanya dari awal sampai semua kembali mungkin beberapa kali. 246 00:21:18,800 --> 00:21:21,970 Dan maka di sini kita memiliki kekuatan ekspresi reguler adalah bahwa mereka 247 00:21:21,970 --> 00:21:24,900 dapat menentukan pola bukan hanya karakter di sini. 248 00:21:24,900 --> 00:21:28,510 Jadi sepanjang jalan sampai ke kembali akhir, dimulai dengan yang paling kiri dan serakah. 249 00:21:30,710 --> 00:21:32,710 Mari kita lihat - apa lagi yang bisa kita cari. 250 00:21:32,710 --> 00:21:39,860 Saya kira satu hal jika Anda tertarik untuk mencari kata ganti dia dan dia, 251 00:21:39,860 --> 00:21:44,600 Anda bisa memeriksa s yang sama dengan 0 atau 1 252 00:21:44,600 --> 00:21:49,710 dan ekspresi dia, dan itu mungkin tidak akan kembali - 253 00:21:49,710 --> 00:21:58,020 oh, saya kira itu kembali ia karena kita melihat kekuatan, hari itu, di sini. 254 00:22:00,590 --> 00:22:06,270 Mari kita mencoba menentukan bahwa ini harus datang pada awal dari sesuatu. 255 00:22:06,640 --> 00:22:09,530 Mari kita lihat apakah itu menurun. 256 00:22:09,530 --> 00:22:19,630 Jadi kita bisa melakukan lemak, dan di sana kami tidak mendapatkan apa-apa karena dia dan dia 257 00:22:19,630 --> 00:22:22,870 tidak terjadi dalam kalimat ini. 258 00:22:24,960 --> 00:22:30,410 Besar. Oke - jadi kembali ke kucing di sini. 259 00:22:30,410 --> 00:22:35,720 Jadi pola kompleks menyakiti otak. 260 00:22:35,720 --> 00:22:40,500 Jadi itulah sebabnya kami menggunakan ekspresi reguler untuk menghindari masalah ini. 261 00:22:40,820 --> 00:22:43,520 >> Jadi di sini adalah beberapa mode lain yang berguna Anda dapat bermain-main dengan. 262 00:22:43,520 --> 00:22:50,290 Kami melihat pencarian hari ini, tetapi Anda juga dapat menggunakan pertandingan, split, findAll, dan kelompok. 263 00:22:50,290 --> 00:22:53,970 Jadi hal keren lain yang dapat Anda lakukan dengan ekspresi reguler selain hanya 264 00:22:53,970 --> 00:22:58,870 mencari pola adalah mengambil pola dan memegang semua pertandingan - 265 00:22:58,870 --> 00:23:02,530 variabel - dan kemudian menggunakan mereka dalam kode Anda di kemudian hari. 266 00:23:02,850 --> 00:23:05,980 Itu bisa sangat membantu. Hal-hal lain mungkin menghitung. 267 00:23:05,980 --> 00:23:11,720 Jadi kita bisa menghitung jumlah contoh pola ekspresi reguler, 268 00:23:11,720 --> 00:23:13,960 dan itulah yang dapat kita gunakan untuk kelompok. 269 00:23:13,960 --> 00:23:17,550 Dan mode lain juga juga mungkin. 270 00:23:18,040 --> 00:23:22,980 Jadi saya hanya ingin berbicara sedikit lebih banyak tentang cara-cara lain Anda dapat menggunakan ekspresi reguler. 271 00:23:22,980 --> 00:23:29,100 >> Jadi satu aplikasi yang lebih maju dalam pencocokan fuzzy. 272 00:23:29,100 --> 00:23:33,450 Jadi jika Anda mencari teks untuk ekspresi, Julius Caesar, 273 00:23:33,450 --> 00:23:37,740 dan Anda melihat baik Gaius Julius Caesar atau nama Julius Caesar dalam bahasa lain, 274 00:23:37,740 --> 00:23:44,400 maka Anda juga mungkin ingin menetapkan beberapa berat terhadap nilai-nilai. 275 00:23:44,400 --> 00:23:48,930 Dan jika itu cukup dekat - jika melintasi batas tertentu - maka Anda ingin 276 00:23:48,930 --> 00:23:50,860 untuk dapat menerima Julius Caesar. 277 00:23:50,860 --> 00:24:00,580 Jadi ada beberapa implementasi yang berbeda untuk itu dalam beberapa bahasa lainnya juga. 278 00:24:02,580 --> 00:24:08,420 Berikut adalah beberapa alat lainnya, Regex Pal - sebuah aplikasi kecil yang berguna online untuk 279 00:24:08,420 --> 00:24:12,190 memeriksa apakah ekspresi reguler Anda terdiri dengan benar. 280 00:24:12,190 --> 00:24:18,500 Ada juga alat mandiri yang dapat dijalankan dari desktop Anda 281 00:24:18,500 --> 00:24:22,100 seperti Ultra Pico, dan serta buku masak adil. 282 00:24:22,100 --> 00:24:25,410 Jadi jika Anda melakukan sebuah proyek yang melibatkan satu ton ekspresi reguler 283 00:24:25,410 --> 00:24:29,810 ini mungkin adalah tempat untuk pergi di luar lingkup hari ini. 284 00:24:31,520 --> 00:24:35,770 Dan kemudian hanya untuk memberikan rasa bagaimana umum itu 285 00:24:35,770 --> 00:24:44,090 ada grep di Unix, Perl memiliki built-in, dan C ada PCRE untuk C. 286 00:24:44,090 --> 00:24:48,890 Dan kemudian semua bahasa lain juga memiliki paket ekspresi reguler 287 00:24:48,890 --> 00:24:52,020 yang beroperasi dengan dasarnya sintaks yang sama kami 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 >> Google Code Search sebenarnya layak disebut, ini adalah salah satu 290 00:24:58,980 --> 00:25:05,720 relatif sedikit aplikasi di luar sana yang memungkinkan masyarakat untuk mengakses 291 00:25:05,720 --> 00:25:07,800 database-nya menggunakan ekspresi reguler. 292 00:25:07,800 --> 00:25:12,920 Jadi jika Anda melihat di Google Code Search Anda dapat menemukan kode 293 00:25:12,920 --> 00:25:16,880 jika Anda mencari sebuah contoh bagaimana fungsi dapat digunakan, 294 00:25:16,880 --> 00:25:21,610 Anda dapat menggunakan ekspresi reguler untuk menemukan bahwa fungsi yang digunakan dalam segala macam kasus yang berbeda. 295 00:25:21,610 --> 00:25:28,000 Anda bisa mencari fwrite, dan kemudian Anda bisa mencari bendera menulis atau membaca 296 00:25:28,000 --> 00:25:32,000 jika Anda ingin contoh fwrite yang digunakan dalam kasus itu. 297 00:25:33,530 --> 00:25:37,010 Jadi hal yang sama di sana, dan ini adalah beberapa referensi. 298 00:25:37,010 --> 00:25:40,990 Ini akan tersedia secara online juga, jadi akan maju jika 299 00:25:40,990 --> 00:25:45,560 Anda ingin melihat Python, grep, Perl - Anda hanya ingin mendapatkan beberapa inspirasi 300 00:25:45,560 --> 00:25:50,650 atau jika Anda ingin melihat lebih pada teori berikut adalah beberapa melompat yang baik off tempat. 301 00:25:50,650 --> 00:25:53,870 Terima kasih banyak. 302 00:25:58,470 --> 00:25:59,910 [CS50.TV]