1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Seminar: Pattern Pagtutugma sa Mga Regular Expression] 2 00:00:02,000 --> 00:00:04,000 [John Mussman-Harvard University] 3 00:00:04,000 --> 00:00:07,220 [Ito ay CS50.-CS50.TV] 4 00:00:07,780 --> 00:00:11,610 Okay. Well, maligayang pagdating sa lahat. Ito ay CS50 2012. 5 00:00:11,780 --> 00:00:16,610 Ang pangalan ko ay John, at ako ay pakikipag-usap ngayon tungkol sa mga regular na expression. 6 00:00:16,610 --> 00:00:22,530 Mga regular na expression ay pangunahing isang kasangkapan, ngunit din minsan ginagamit 7 00:00:22,530 --> 00:00:28,650 sa code aktibong upang lubos na tumutugma sa mga pattern at mga string. 8 00:00:28,650 --> 00:00:33,800 Kaya narito ang isang web comic mula xkcd. 9 00:00:34,440 --> 00:00:42,370 Sa comic doon ay isang pagpatay misteryo kung saan ang mga killer ay may 10 00:00:42,370 --> 00:00:47,860 Sinundan isang tao sa bakasyon, at ang protagonists kailangang 11 00:00:47,860 --> 00:00:52,500 maghanap sa pamamagitan ng 200 megabytes ng mga email na naghahanap para sa isang address. 12 00:00:52,500 --> 00:00:56,090 At ang mga ito ay tungkol sa upang bigyan up kapag ang isang tao na nakakaalam ng mga regular na expression - 13 00:00:56,090 --> 00:01:00,550 siguro isang superhero - swoops down at nagsusulat ng ilang mga code 14 00:01:00,550 --> 00:01:02,970 at malulutas nito ang pagpatay misteryo. 15 00:01:02,970 --> 00:01:07,370 Kaya siguro na magiging isang bagay na ikaw ay empowered upang gawin 16 00:01:07,370 --> 00:01:09,370 pagkatapos ng seminar na ito. 17 00:01:09,370 --> 00:01:12,250 Lamang namin ay pagpunta sa magbigay ng isang maikli subalit malaman panimula sa ang wika 18 00:01:12,250 --> 00:01:16,770 at bibigyan ka ng sapat na kakayahan upang pumunta pagkatapos ng higit pang mga mapagkukunan sa iyong sariling. 19 00:01:17,680 --> 00:01:21,700 >> Kaya mga regular na expression tumingin talaga ganito. 20 00:01:22,930 --> 00:01:25,550 Ito ay isang regular na expression sa Ruby. 21 00:01:25,550 --> 00:01:29,280 Ito ay hindi lubha iba't ibang mga wika. 22 00:01:29,690 --> 00:01:37,630 Mayroon kaming lamang sa slashes upang simulan at markahan ang mga regular na expression sa Ruby. 23 00:01:37,630 --> 00:01:42,880 At ito ay isang regular na expression upang tumingin para sa email address na pattern. 24 00:01:42,880 --> 00:01:49,160 Kaya naming makita sa unang bit hitsura para sa anumang mga alphanumeric character. 25 00:01:50,500 --> 00:01:54,880 Iyon ay dahil sa ang email address na madalas mayroon na magsimula sa isang alpabetikong character. 26 00:01:55,460 --> 00:01:59,330 At pagkatapos ay ang anumang mga espesyal na character na sinundan ng @ simbolo. 27 00:01:59,330 --> 00:02:03,260 At pagkatapos ay ang parehong bagay para sa domain name. 28 00:02:03,260 --> 00:02:10,030 At pagkatapos ay sa pagitan ng 2 at 4 na mga character upang tumingin para sa. Com,. Net, at iba pa. 29 00:02:10,850 --> 00:02:13,200 Kaya na ay isa pang halimbawa ng mga regular na expression. 30 00:02:13,200 --> 00:02:17,270 Kaya regular na expression ay mga protocol para sa paghahanap ng patters sa teksto. 31 00:02:17,270 --> 00:02:21,130 Gawin nila mga paghahambing, mga pagpili, at pamalit. 32 00:02:21,690 --> 00:02:27,970 Kaya isang third halimbawa ay sa paghahanap ng lahat ng mga numero ng telepono na nagtatapos sa 54 sa isang direktoryo. 33 00:02:27,970 --> 00:02:34,360 Kaya bago David rips up ang CS50 direktoryo kami maaaring maghanap para sa 34 00:02:34,360 --> 00:02:40,450 sa isang pattern na kung saan mayroon kaming mga panaklong pagkatapos 3 mga numero ay matatapos panaklong, 35 00:02:40,450 --> 00:02:44,070 3 higit pang mga numero, isang gitling, 2 numero, at pagkatapos ay 54. 36 00:02:44,070 --> 00:02:48,310 At iyon ay magiging lubos kung paano namin dumating up sa isang regular na expression upang maghanap para sa na. 37 00:02:49,150 --> 00:02:52,960 >> Kaya may mga - namin nagawa ang ilang mga bagay sa CS50 na Medyo parang 38 00:02:52,960 --> 00:02:59,740 mga regular na expression, kaya - halimbawa - sa dictionary.C file 39 00:02:59,740 --> 00:03:04,720 para sa spell check hanay problema maaaring ginamit mo fscanf 40 00:03:04,720 --> 00:03:07,930 upang basahin sa isang salita mula sa diksyunaryo. 41 00:03:07,930 --> 00:03:16,240 At maaari mong makita ang porsyento 45s ay naghahanap para sa isang string ng 45 mga character. 42 00:03:16,240 --> 00:03:20,020 Kaya ito ay medyo tulad ng isang hindi pa ganap regular na expression. 43 00:03:21,150 --> 00:03:26,060 At maaari kang magkaroon ng anumang 45 mga character na magkasya ang bayarin sa doon 44 00:03:26,060 --> 00:03:28,080 at pumili ng mga up. 45 00:03:28,080 --> 00:03:33,480 At pagkatapos ay ang pangalawang halimbawa sa pinakahuling problema web programming 46 00:03:33,480 --> 00:03:40,760 itakda sa distro code para sa php namin talagang gawin ay may isang simpleng regular na expression. 47 00:03:40,760 --> 00:03:46,790 At isa na ito lamang lamang na naghahanap upang suriin kung ang mga web page na ito ay naipasa sa 48 00:03:46,790 --> 00:03:51,940 tumutugma sa alinman sa pag-login o mag-logout magrehistro. PHP. 49 00:03:52,220 --> 00:03:57,910 At pagkatapos ay bumabalik totoo o hindi batay sa mga regular na expression na pagtutugma. 50 00:03:59,400 --> 00:04:01,740 >> Kaya kapag mo ginagamit ang karaniwang expression? 51 00:04:01,740 --> 00:04:04,820 Bakit nandito ka ngayon? 52 00:04:05,330 --> 00:04:08,480 Kaya hindi mo nais na gamitin ang mga regular na expression kapag mayroong isang bagay na 53 00:04:08,480 --> 00:04:11,640 ang ipinapakita ng trabaho para sa iyo kahit na mas madali. 54 00:04:11,640 --> 00:04:15,510 Kaya XML at HTML ay aktwal na medyo nakakalito 55 00:04:15,510 --> 00:04:18,480 sumulat ng mga regular na expression para sa bilang ay namin makita sa ilang sandali. 56 00:04:19,110 --> 00:04:23,280 Kaya may mga nakalaang parsers para sa mga wikang iyon. 57 00:04:24,170 --> 00:04:30,060 Kailangan mo ring maging okay sa kalakalan offs at katumpakan madalas. 58 00:04:30,060 --> 00:04:36,220 Kung sinusubukan - kaya namin nakita ang isang regular na expression para sa isang email address, 59 00:04:37,370 --> 00:04:42,590 pero sabihin mo gusto ang isang tiyak na address ng email at dahan-dahan ang 60 00:04:42,590 --> 00:04:48,570 regular na expression ay maaaring maging mas kumplikadong bilang ito ay naging mas tumpak. 61 00:04:49,580 --> 00:04:52,260 Kaya na magiging isa kalakalan off. 62 00:04:52,260 --> 00:04:55,330 Mayroon kang upang matiyak na okay ka sa paggawa na may mga regular na expression. 63 00:04:55,330 --> 00:04:57,920 Kung alam mo kung ano mismo ang iyong hinahanap maaaring gumawa ng higit pa pakiramdam 64 00:04:57,920 --> 00:05:02,070 ang ilalagay sa oras at magsulat ng mas epektibong pang-parse. 65 00:05:02,070 --> 00:05:06,980 At sa wakas ay may makasaysayang mga isyu sa ayos 66 00:05:06,980 --> 00:05:08,940 ng mga expression at mga wika. 67 00:05:08,940 --> 00:05:12,960 Regular na expression ay aktwal na magkano ang mas malakas kaysa 68 00:05:12,960 --> 00:05:16,450 regular na mga expression sa bawat sabihin sa isang pormal na kahulugan. 69 00:05:17,130 --> 00:05:20,150 >> Kaya hindi ko nais upang pumunta masyadong malayo sa pormal na teorya, 70 00:05:20,150 --> 00:05:24,000 ngunit karamihan sa mga wika na aming code sa aktwal ay hindi regular. 71 00:05:24,000 --> 00:05:29,110 At ito ang dahilan kung bakit karaniwang expression kung minsan ay hindi isinasaalang-alang ang lahat na secure. 72 00:05:29,670 --> 00:05:33,150 Kaya talaga doon ay isang Chomsky hierarchy para sa mga wika, 73 00:05:33,150 --> 00:05:38,400 at mga regular na expression ay bumuo up gamit ang unyon, pagdudugtong, 74 00:05:38,400 --> 00:05:41,810 at ang pagpapatakbo Kleene star na namin makita ang ilang mga minuto. 75 00:05:43,130 --> 00:05:48,860 Kung ikaw ay interesado sa teorya doon ay masyadong maraming nagaganap doon sa ilalim ng hood. 76 00:05:50,360 --> 00:05:55,880 >> Kaya ang isang maikling kasaysayan - para lamang sa konteksto dito - regular na set up ay dumating 77 00:05:55,880 --> 00:05:59,580 sa 1950s, at pagkatapos ay nagkaroon kami simpleng editor na 78 00:05:59,580 --> 00:06:03,300 Isinama mga regular na expression - lamang naghahanap para sa mga string. 79 00:06:03,570 --> 00:06:09,110 Grep - na kung saan ay isang command line tool - ay isa sa mga unang 80 00:06:09,110 --> 00:06:14,160 napaka-tanyag na mga tool na inkorporada regular na mga expression sa 1960. 81 00:06:14,160 --> 00:06:20,560 Sa '80s, Perl ay itinayo - ay isang programming language na 82 00:06:20,560 --> 00:06:24,110 isinasama mga regular na expression napaka kitang-kita. 83 00:06:24,550 --> 00:06:30,130 At pagkatapos ay mas kamakailan lamang namin ay nagkaroon Perl compatible regular expression 84 00:06:30,130 --> 00:06:35,870 protocol talaga sa iba pang mga wika na gumagamit ng magkano ang parehong syntax. 85 00:06:36,630 --> 00:06:39,840 Siyempre ang pinaka-mahalagang kaganapan noon ay sa 2008 86 00:06:39,840 --> 00:06:43,040 kung saan nagkaroon ng unang Pambansang Karaniwang Expression Day, 87 00:06:43,040 --> 00:06:47,350 naniniwala na ako ay Hunyo 1 kung nais mong ipagdiwang na. 88 00:06:48,430 --> 00:06:50,840 >> Muli, lamang ng kaunti kaunti pang teorya dito. 89 00:06:52,180 --> 00:06:55,320 Kaya may mga ilang iba't ibang mga paraan ng paggawa mga regular na expression. 90 00:06:55,950 --> 00:07:02,050 Isang simpleng paraan ay upang bumuo ng mga expression na kayo ay pagpunta sa 91 00:07:02,050 --> 00:07:07,500 tumakbo sa string interpret - isa lamang bumuo ng isang maliit na mini-program na 92 00:07:07,500 --> 00:07:11,870 Pag-aaralan ng mga piraso ng isang string at makita, "Oh, ito ay magkasya sa regular na expression o hindi?" 93 00:07:12,250 --> 00:07:14,250 At pagkatapos ay tumakbo na. 94 00:07:14,250 --> 00:07:17,300 Kaya kung mayroon kang isang napakaliit na regular na expression, ito ay marahil 95 00:07:17,300 --> 00:07:19,380 ang pinakamahusay na paraan upang gawin ito. 96 00:07:20,090 --> 00:07:25,420 At pagkatapos ay kung ikaw - isa pang pagpipilian ay upang panatilihin ang reconstructing 97 00:07:25,420 --> 00:07:30,260 expression bilang pumunta ka, at iyon ay ang gayahin posibilidad. 98 00:07:30,440 --> 00:07:37,690 At ang mga unang bahagi ng pagtatangka sa mga regular na expression algorithm ay 99 00:07:37,690 --> 00:07:44,330 medyo simple at relatibong mabilis, ngunit hindi magkaroon ng maraming kakayahang umangkop. 100 00:07:44,330 --> 00:07:47,500 Kaya gawin kahit na ang ilan sa mga bagay na kami ay pagpunta upang tumingin sa 101 00:07:47,500 --> 00:07:52,860 ngayon kami ay nagkaroon na gawin mas kumplikadong mga regular na expression 102 00:07:52,860 --> 00:07:56,650 pagpapatupad na potensyal na mas mas mabagal; gayon ay isang bagay upang tandaan 103 00:07:57,510 --> 00:08:02,920 Mayroon ding isang regular na expression pagtanggi ng pag-atake iba't-ibang 104 00:08:02,920 --> 00:08:08,330 na maningning na tagumpay ang mga potensyal na para sa mga mas bagong pagpapatupad ng 105 00:08:08,330 --> 00:08:10,930 regular na expression upang maging napaka-komplikadong. 106 00:08:11,570 --> 00:08:15,650 At sa halos parehong kahulugan na nakita natin sa pag-atake buffer overflow, 107 00:08:15,650 --> 00:08:21,610 mayroon kang pag-atake na gumagana sa pamamagitan ng paggawa ng recursive loop na 108 00:08:21,610 --> 00:08:24,400 sumobra ang kapasidad ng memorya. 109 00:08:24,780 --> 00:08:29,540 At sa pamamagitan ng ang paraan Regexen ay isa sa mga opisyal na pangmaramihan ng mga regular na expression 110 00:08:29,540 --> 00:08:32,890 sa pamamagitan ng pagkakatulad sa mga baka sa Anglo-Sahon. 111 00:08:33,500 --> 00:08:40,169 >> Okay, sa gayon ang Library Python marami sa inyo dito sa taong may mga Mac, 112 00:08:40,169 --> 00:08:43,860 sa gayon ay maaari mo talagang hilahin ito up sa iyong screen. 113 00:08:43,860 --> 00:08:47,480 Mga regular na expression ay binuo sa Python. 114 00:08:48,070 --> 00:08:53,020 At kaya Python ay preloaded sa mga Mac at available din online sa link na ito. 115 00:08:53,770 --> 00:08:57,350 Kaya't kung ikaw ay nanonood maaari mong i-pause at siguraduhin na mayroon kang Python 116 00:08:58,080 --> 00:09:00,170 maglaro bilang namin sa paligid dito. 117 00:09:00,780 --> 00:09:06,420 May ng manu-manong online, kaya kung ikaw i-type lamang sa Python iyong computer 118 00:09:06,420 --> 00:09:10,500 makikita mo na ang bersyon ay lumalabas sa terminal. 119 00:09:11,070 --> 00:09:17,720 Kaya ko na ibinigay ng isang link sa mga manu-manong para sa 2 Bersyon ng Python pati na rin ang isang impostor sheet. 120 00:09:17,720 --> 00:09:23,100 May Bersyon 3 ng Python, ngunit ang iyong Mac ay hindi kinakailangang 121 00:09:23,100 --> 00:09:25,130 ay may na preloaded. 122 00:09:25,130 --> 00:09:27,360 Kaya hindi lubha naiiba. 123 00:09:27,360 --> 00:09:33,270 Okay, kaya ang ilang mga pangunahing kaalaman sa paggamit ng mga karaniwang expression sa Python. 124 00:09:34,080 --> 00:09:42,650 >> Kaya dito ginamit ko isang napaka-simpleng expression, kaya ko ginawa Python muling pag-import 125 00:09:43,750 --> 00:09:47,070 at pagkatapos ay kinuha ang resulta ng re.search. 126 00:09:47,070 --> 00:09:49,910 At paghahanap ay tumatagal ng 2 na mga argumento. 127 00:09:49,910 --> 00:09:56,040 Ang una ay ang regular na expression, at ang pangalawa ay ang teksto 128 00:09:56,040 --> 00:09:58,290 o string na gusto mong pag-aralan. 129 00:09:58,290 --> 00:10:01,210 At pagkatapos ay ako naka-print out ang result.group. 130 00:10:01,580 --> 00:10:05,860 Kaya ito ay ang 2 pangunahing pag-andar namin ay pumunta upang makita ngayon 131 00:10:06,790 --> 00:10:10,170 sa pag-aaral tungkol sa mga regular na expression. 132 00:10:10,170 --> 00:10:12,880 Kaya lang na pinaghihiwa-hiwalay ang mga regular na expression dito 133 00:10:12,880 --> 00:10:21,770 h at pagkatapos \ w at pagkatapos m kaya \ w lamang ang tumatanggap ng anumang alpabetikong character sa doon. 134 00:10:21,850 --> 00:10:26,820 Kaya dito kami ay naghahanap para sa isang "h" at pagkatapos ay isa pang alpabetikong character 135 00:10:26,820 --> 00:10:30,060 at pagkatapos ay i-m, kaya dito na tumutugma sa ham 136 00:10:30,060 --> 00:10:34,480 in, "Abraham Lincoln at ham sandwich." 137 00:10:35,040 --> 00:10:37,150 Ito ang resulta ng pangkat na iyon. 138 00:10:37,680 --> 00:10:43,130 Isa pang bagay na maaari naming gawin ay gamitin ang aming bago string ng teksto sa Python. 139 00:10:43,130 --> 00:10:46,220 Kaya hulaan ko ako ay sige at hilahin na up dito. 140 00:10:46,220 --> 00:10:49,210 Python-import muli. 141 00:10:50,070 --> 00:10:54,000 At kung ako ay upang gawin ang parehong bagay - hayaang sabihin sa amin ang teksto, 142 00:10:55,390 --> 00:11:00,800 "Abraham," ipaalam sa amin mag-zoom in - doon kami pumunta. 143 00:11:01,610 --> 00:11:06,430 Teksto ay, "Abraham kumakain ham." 144 00:11:07,460 --> 00:11:15,260 Okay, at pagkatapos ay magreresulta = re.search. 145 00:11:16,260 --> 00:11:22,020 At pagkatapos ay aming mga expression ay maaaring maging h, at pagkatapos ay kong gawin tuldok m. 146 00:11:22,020 --> 00:11:26,280 Kaya tuldok lamang tumatagal ng anumang mga character na ay hindi isang bagong linya kasama ang mga numero, 147 00:11:26,280 --> 00:11:28,650 porsyento ng mga karatula, anumang bagay na tulad nang. 148 00:11:28,650 --> 00:11:38,030 At pagkatapos ay i-text - boom - at pagkatapos ay i-result.group--oo. 149 00:11:38,030 --> 00:11:41,820 Kaya na lamang kung paano ipatupad ang pangunahing pagpapagana dito. 150 00:11:42,300 --> 00:11:55,110 Kung nagkaroon kami ng text singsing na - na mabaliw teksto - Kasama sabihin ng maraming pabalik slashes 151 00:11:55,110 --> 00:12:01,180 at mga string sa loob at mga bagay na maaaring magmukhang escape sequence, 152 00:12:01,180 --> 00:12:08,480 pagkatapos namin marahil nais na gamitin ang raw na input ng teksto upang masiguro na tatanggapin. 153 00:12:08,480 --> 00:12:14,120 At na lang kamukha na. 154 00:12:14,120 --> 00:12:17,810 Kaya kung humahanap kami bawat isa sa kanila doon sa hindi kami makahanap ng anumang bagay. 155 00:12:19,070 --> 00:12:21,680 Ngunit iyon ay kung paano mo ipatupad ito; lang bago ang string ng 156 00:12:21,680 --> 00:12:24,990 ang regular na expression na ilagay ang titik r. 157 00:12:26,150 --> 00:12:30,260 >> Okay, kaya ipaalam sa amin panatilihin ang pagpunta. 158 00:12:30,260 --> 00:12:33,730 Ang lahat ng mga karapatan - kaya ipaalam sa amin tumingin sa isang ilang mga pattern ng paulit-ulit dito. 159 00:12:34,750 --> 00:12:39,150 Kaya ang isang bagay na gusto mong gawin ay ulitin ang mga bagay 160 00:12:40,040 --> 00:12:42,480 bilang ikaw ay naghahanap sa pamamagitan ng text. 161 00:12:42,480 --> 00:12:48,300 Kaya na gawin ang isang sinusundan ng anumang bilang ng mga b - gawin mo ab *. 162 00:12:48,630 --> 00:12:51,620 At pagkatapos ay mayroong isang serye ng iba pang mga panuntunan masyadong. 163 00:12:51,620 --> 00:12:54,380 At maaari mong tingnan ang lahat ng mga ito up; kukunin ko na lang tumakbo sa pamamagitan ng ilan sa mga 164 00:12:54,380 --> 00:12:57,630 pinaka-karaniwang ginagamit na mga bago. 165 00:12:57,630 --> 00:13:03,920 Kaya ab + ay isang sinusundan ng anumang N mas malaki kaysa sa 0 ng b. 166 00:13:04,510 --> 00:13:08,000 ab? ay isang sinusundan ng 0 o 1 ng b. 167 00:13:09,190 --> 00:13:18,580 ab {N} ay sinundan sa pamamagitan ng N ng b, at pagkatapos ay iba pa. 168 00:13:18,580 --> 00:13:22,820 Kung ikaw ay may 2 numero sa kulot tirante ka ng pagtukoy ng hanay 169 00:13:23,300 --> 00:13:25,440 na maaaring maging posibleng tumugma. 170 00:13:26,390 --> 00:13:30,420 Kaya tayo ay tumingin nang higit pa sa isang ilang mga pattern ng paulit-ulit sa isang minuto. 171 00:13:31,960 --> 00:13:42,300 Kaya 2 mga bagay na dapat tandaan kapag gumagamit ng mga pattern na tumutugma sa mga kasangkapan dito. 172 00:13:42,300 --> 00:13:52,120 Kaya natin na nais namin upang tumingin sa mga Hm ng, "Abraham Lincoln ginagawang ham sandwich." 173 00:13:52,120 --> 00:13:55,230 Kaya ako ay nagbago Abraham Lincoln pangalan sa Abraham. 174 00:13:55,230 --> 00:14:00,290 At ngayon kami ay naghahanap para sa kung ano ay ibinalik sa pamamagitan ng pagpapaandar na ito sa paghahanap, 175 00:14:00,290 --> 00:14:03,270 at ito nagbabalik lamang ang ham sa kasong ito. 176 00:14:03,620 --> 00:14:08,080 At ginagawa nito na dahil lamang sa paghahanap natural tumatagal ang pinaka-kaliwa queue. 177 00:14:08,080 --> 00:14:12,130 At lahat ng mga regular na expression maliban kung tinukoy mo kung hindi man ay gawin na. 178 00:14:12,830 --> 00:14:18,880 Kung gusto naming mahanap ang lahat doon ay isang katangian para sa na - hanapin ang lahat. 179 00:14:18,880 --> 00:14:35,100 Kaya na maaari lamang hitsura ng lahat = re.findall ('h.m', text) 180 00:14:35,100 --> 00:14:44,540 at pagkatapos all.group (). 181 00:14:44,540 --> 00:14:51,040 Ang lahat ng mga gumagawa ng parehong mga hamon at hamon; sa kasong ito kapwa ng mga string sa Abraham bawat hamon. 182 00:14:51,610 --> 00:14:55,110 Kaya na ay isa pang pagpipilian. 183 00:14:56,250 --> 00:15:06,940 >> Mahusay. Ang iba pang mga bagay na dapat tandaan ay na ang mga regular na expression tumagal ang pinakamalaking intuitively. 184 00:15:06,940 --> 00:15:09,520 Ipaalam sa amin tumingin sa halimbawang ito. 185 00:15:10,200 --> 00:15:16,070 Aming ginawa na kaliwa karamihan sa mga search dito, at pagkatapos ay sinubukan ko ng mas malaking paghahanap 186 00:15:16,070 --> 00:15:18,800 gamit ang Kleene operator star. 187 00:15:18,800 --> 00:15:24,180 Kaya para sa, "Abraham Lincoln ginagawang sandwich ham," at ako lamang Nakakuha pabalik 188 00:15:24,180 --> 00:15:26,280 m bilang isang resulta. 189 00:15:26,280 --> 00:15:31,670 Ang dahilan sa pagkakamali noon na maaaring ako nagsagawa ng anumang numero ng 190 00:15:31,670 --> 00:15:36,140 h ay dahil hindi ko tukuyin ang anumang bagay upang pumunta sa pagitan ng h at m. 191 00:15:36,140 --> 00:15:42,010 Ang tanging mga halimbawa doon na nagkaroon m - ang mga halimbawa lamang doon na may m sa loob nito 192 00:15:42,010 --> 00:15:46,220 at anumang bilang ng h ni lamang ay ang string m. 193 00:15:46,490 --> 00:15:51,850 Pagkatapos Sinubukan kong ito muli; ko sinabi, "Okay, ipaalam sa amin kumuha ang aktwal na pinakamalaking grupo dito." 194 00:15:51,850 --> 00:15:59,670 At pagkatapos ay ako ginawang h. * M, kaya lang na nagbabalik ng anumang bilang ng mga character sa pagitan ng h at m. 195 00:16:00,280 --> 00:16:02,950 At kung lamang ikaw ay nagsisimula out at pag-iisip, "Oh, okay, ito rin ay 196 00:16:02,950 --> 00:16:11,560 kumuha ako ng ham, "ito aktwal na tumatagal ng lahat ng bagay mula sa h sa Abraham Lincoln 197 00:16:11,560 --> 00:16:13,690 ang lahat ng mga paraan ng hanggang sa dulo ng ham. 198 00:16:14,040 --> 00:16:18,110 Ito ay matakaw; ito nakikita ng h - lahat ng mga ito ng iba pang teksto - m, 199 00:16:18,110 --> 00:16:21,280 at iyon ay kung ano ang aabutin in 200 00:16:22,060 --> 00:16:27,480 Ito ay isang partikular na kapansin-pansin - ito ay isang tampok ng aming makakaya din 201 00:16:27,480 --> 00:16:30,670 tukuyin ito para hindi matakaw paggamit ng iba pang mga function. 202 00:16:31,480 --> 00:16:34,490 Ngunit ito ay isang bagay na mayroon kami na dapat tandaan lalo na 203 00:16:34,490 --> 00:16:38,720 kapag tumitingin sa HTML teksto, na kung saan ay isang kadahilanan na 204 00:16:38,720 --> 00:16:41,500 regular na expression ay mahirap para sa mga HTML. 205 00:16:42,460 --> 00:16:46,310 Dahil kung mayroon kang isang bukas na HTML tag at pagkatapos ng maraming mga bagay-bagay sa gitna 206 00:16:46,310 --> 00:16:49,820 at pagkatapos ay sa ilang ibang mga HTML tag sarado magkano mamaya sa programa, 207 00:16:49,820 --> 00:16:55,420 lamang na iyong kinakain up ng maraming ng iyong HTML code marahil nang hindi sinasadya. 208 00:16:56,200 --> 00:17:01,840 >> Ang lahat ng mga karapatan - kaya mas espesyal na character, tulad ng maraming iba pang mga wika, 209 00:17:01,840 --> 00:17:04,780 makatakas namin ang paggamit ng slash. 210 00:17:04,780 --> 00:17:10,329 Kaya maaari naming gamitin ang mga tuldok upang tukuyin ang anumang mga character na maliban para sa isang bagong linya. 211 00:17:10,329 --> 00:17:14,550 Maaari naming gamitin ang escape w upang tukuyin ang anumang alpabetikong character. 212 00:17:14,550 --> 00:17:20,329 At sa pamamagitan ng pagkakatulad escape d para sa anumang integer - numerical character. 213 00:17:20,630 --> 00:17:27,440 Maaari naming tukuyin - maaari naming gamitin bracket upang tukuyin ang mga kaugnay na mga expression. 214 00:17:27,440 --> 00:17:30,970 Kaya ito ay tumatanggap ng a, b, c o. 215 00:17:31,320 --> 00:17:37,000 At maaari rin naming tukuyin o mga pagpipilian para sa alinman sa o b. 216 00:17:37,000 --> 00:17:41,110 Halimbawa - kung humahanap kami ng maraming mga posibilidad 217 00:17:41,110 --> 00:17:44,940 sa mga bracket kami maaaring gamitin ang operator o tulad ng sa - 218 00:17:44,940 --> 00:17:52,480 kaya ipaalam sa amin bumalik sa halimbawang ito dito. 219 00:17:53,000 --> 00:17:59,790 At ngayon, ipaalam sa amin kumuha - ipaalam sa amin bumalik sa halimbawang ito dito, at pagkatapos ay 220 00:17:59,790 --> 00:18:12,290 tumagal ae - kaya ito ay dapat ibalik - hulaan ko pa rin ito ni Abraham. 221 00:18:12,290 --> 00:18:17,410 Kaya ito - kung gagawin namin ang lahat - mahusay. 222 00:18:17,410 --> 00:18:22,700 Kaya ipaalam sa amin i-update ang teksto dito. 223 00:18:22,700 --> 00:18:34,690 "Abraham kumakain ham habang hemming kanyang -. Habang hemming" Mahusay. 224 00:18:44,090 --> 00:18:47,330 Lahat. Mahusay. Ngayon makuha namin ham, ham, at magtupi. 225 00:18:48,510 --> 00:18:59,370 Habang hemming - habang humuhuni sa kanya - habang humuhuni sa magtupi kanya. Mahusay. 226 00:19:00,350 --> 00:19:03,250 Parehong bagay. 227 00:19:03,820 --> 00:19:09,180 Ngayon ang lahat ay nagbabalik pa rin lang ang ham, ham, at magtupi nang walang tumatawag sa humingig o sa kanya. 228 00:19:09,940 --> 00:19:22,600 Mahusay - kaya kung ano ang gusto namin upang tumingin sa alinman na - sa gayon maaari rin naming gawin 229 00:19:23,510 --> 00:19:33,810 siya o - kami ay bumalik sa na. 230 00:19:34,810 --> 00:19:45,760 Okay - kaya - lahat ng mga karapatan - sa mga posisyong maaari mo ring gamitin ang kareta o ang dollar sign 231 00:19:45,760 --> 00:19:49,350 upang tukuyin na ikaw ay naghahanap para sa isang bagay sa simula o dulo ng isang string. 232 00:19:50,260 --> 00:19:52,260 O sa simula o dulo ng isang salita. 233 00:19:52,400 --> 00:19:54,470 Iyon ay isang paraan upang gamitin iyon. 234 00:19:55,630 --> 00:20:01,160 >> Okay - kaya ipaalam sa amin maglaro sa paligid na may isang bahagyang mas malaking bloke ng teksto. 235 00:20:03,950 --> 00:20:08,310 Ipaalam sa amin sabihin ang hilera na ito dito - ang pahayag na ito dito. 236 00:20:08,310 --> 00:20:11,360 Ang kapangyarihan ng mga regular na expression ay na maaari nilang tukuyin ang mga pattern 237 00:20:11,360 --> 00:20:13,390 hindi lang naayos character. 238 00:20:14,900 --> 00:20:18,790 Ipaalam sa amin gawin - ipaalam sa amin tumawag sa block na ito. 239 00:20:22,400 --> 00:20:27,110 Pagkatapos ay binabasa namin ang lahat ng na-in 240 00:20:28,890 --> 00:20:50,820 At pagkatapos ay may - ipaalam sa amin gawin ang lahat =; kaya kung ano ang ilang mga bagay na maaari kaming maghanap sa pakinabang dito? 241 00:20:50,820 --> 00:20:54,070 Maaari naming hanapin ang tainga expression. 242 00:20:55,050 --> 00:21:01,520 Hindi masyadong kawili-wili. Paano tungkol sa? Susubukan naming makita kung ano ang mangyayari. 243 00:21:03,710 --> 00:21:05,710 Nagbigay ako ng ito ng problema. 244 00:21:06,380 --> 00:21:10,750 Kaya ang anumang bilang ng mga bagay bago muling at lahat. 245 00:21:10,750 --> 00:21:15,630 Kaya dapat na ibalik ang lahat mula sa simula hanggang sa ang lahat ng muling marahil ng ilang beses. 246 00:21:18,800 --> 00:21:21,970 At pagkatapos dito kami ay may sa kapangyarihan ng mga regular na expression ay na sila 247 00:21:21,970 --> 00:21:24,900 Maaari tukuyin ang mga pattern hindi lamang mga character dito ay mga. 248 00:21:24,900 --> 00:21:28,510 Kaya ang lahat ng mga paraan ng hanggang sa ang huling re, ito makapagsimula sa kaliwa at karamihan ay matakaw. 249 00:21:30,710 --> 00:21:32,710 Ipaalam sa amin makita - ano pa ang maaari naming hanapin. 250 00:21:32,710 --> 00:21:39,860 Hulaan ko ang isang bagay na kung ikaw ay interesado sa naghahanap para sa mga pronouns siya at siya, 251 00:21:39,860 --> 00:21:44,600 maaari mong suriin para sa mga pagiging patas sa 0 o 1 252 00:21:44,600 --> 00:21:49,710 at ang expression niya, at iyon ay marahil hindi pagpunta sa bumalik - 253 00:21:49,710 --> 00:21:58,020 oh, hulaan ko ito ibinalik niya dahil doon namin ang pagtingin sa kapangyarihan, sa araw na iyon, ay dito. 254 00:22:00,590 --> 00:22:06,270 Ipaalam sa amin subukan pagtukoy na ito ay may na dumating sa simula ng isang bagay. 255 00:22:06,640 --> 00:22:09,530 Ipaalam sa amin makita kung na patak off. 256 00:22:09,530 --> 00:22:19,630 Kaya maaari naming gawin taba, at mayroong hindi kami makakuha ng anumang bagay dahil siya at siya 257 00:22:19,630 --> 00:22:22,870 huwag mangyari ito sa parirala. 258 00:22:24,960 --> 00:22:30,410 Mahusay. Okay - kaya bumalik sa pusa dito. 259 00:22:30,410 --> 00:22:35,720 Kaya complex pattern ay nakakasama sa utak. 260 00:22:35,720 --> 00:22:40,500 Kaya na ang dahilan kung bakit ginagamit namin ang mga regular na expression upang maiwasan ang mga isyung ito. 261 00:22:40,820 --> 00:22:43,520 >> Kaya narito ang ilang mga iba pang mga kapaki-pakinabang na mga mode maaari mong i-play sa paligid na may. 262 00:22:43,520 --> 00:22:50,290 Kami ay tumingin sa paghahanap sa ngayon, ngunit maaari mo ring gamitin ang tugma, split, findall, at pangkat. 263 00:22:50,290 --> 00:22:53,970 Kaya iba pang mga cool na bagay na maaari mong gawin sa mga regular na expression bukod lamang 264 00:22:53,970 --> 00:22:58,870 naghahanap ng mga pattern ay tumatagal ng isang pattern at may hawak na ang lahat ng mga tugma - 265 00:22:58,870 --> 00:23:02,530 variable nito - at pagkatapos gamit ang mga nasa iyong code sa susunod. 266 00:23:02,850 --> 00:23:05,980 Iyon ay maaaring maging lubos na kapaki-pakinabang. Iba pang mga bagay na maaaring pagbibilang. 267 00:23:05,980 --> 00:23:11,720 Kaya maaari naming bilangin ang bilang ng mga kaso ng isang regular na expression pattern, 268 00:23:11,720 --> 00:23:13,960 at iyon ay kung ano ang maaari naming gamitin para sa mga grupo. 269 00:23:13,960 --> 00:23:17,550 At iba pang mga mode pati na din ang panahon. 270 00:23:18,040 --> 00:23:22,980 Kaya ko lang nais na makipag-usap nang kaunti nang higit pa tungkol sa iba pang mga paraan na maaari mong gamitin ang mga regular na expression. 271 00:23:22,980 --> 00:23:29,100 >> Kaya isang mas advanced na application ay nasa malabo pagtutugma. 272 00:23:29,100 --> 00:23:33,450 Kaya kung naghahanap ka para sa isang teksto para sa pagpapahayag, Julius Caesar, 273 00:23:33,450 --> 00:23:37,740 at nakikita mo ang alinman sa Gaius Julius Caesar o ang pangalan Julius Caesar sa iba pang mga wika, 274 00:23:37,740 --> 00:23:44,400 pagkatapos ay maaari mo ring isaalang-magtalaga ng ilang timbang sa mga halagang iyon. 275 00:23:44,400 --> 00:23:48,930 At kung ito ay malapit na sapat na - kung ito ay tumatawid sa isang tiyak na threshold - pagkatapos gusto mo 276 00:23:48,930 --> 00:23:50,860 upang magawang tanggapin Julius Caesar. 277 00:23:50,860 --> 00:24:00,580 Kaya may mga ilang iba't ibang mga pagpapatupad na para sa ilang iba pang mga wika pati na rin. 278 00:24:02,580 --> 00:24:08,420 Narito ang ilang mga iba pang mga tool, RegEx Pal - isang madaling-magamit na maliit na app sa online 279 00:24:08,420 --> 00:24:12,190 suriin kung ang iyong mga regular na expression ay binubuo nang tama. 280 00:24:12,190 --> 00:24:18,500 Mayroon ding mga nakapag-iisang tool na maaari mong patakbuhin mula sa iyong desktop 281 00:24:18,500 --> 00:24:22,100 tulad ng Ultra Pico, at pati na rin lamang cookbooks. 282 00:24:22,100 --> 00:24:25,410 Kaya kung ang iyong ginagawa sa isang proyekto na nagsasangkot ng isang tonelada ng mga regular na expression 283 00:24:25,410 --> 00:24:29,810 ito ay marahil ang lugar upang pumunta sa labas ng saklaw ng mga araw na ito. 284 00:24:31,520 --> 00:24:35,770 At pagkatapos lamang upang mabigyan ka ng ideya ng kung paano karaniwang mga ito ay 285 00:24:35,770 --> 00:24:44,090 mayroong grep sa Unix, Perl ay may built-in, at C mayroong PCRE para sa C. 286 00:24:44,090 --> 00:24:48,890 At pagkatapos ay ang lahat ng mga iba pang mga wika ay mayroon ding mga regular na expression pakete 287 00:24:48,890 --> 00:24:52,020 umaandar na may mahalagang parehong syntax kami nakakuha ng panlasa ng araw na ito. 288 00:24:52,020 --> 00:24:54,790 PHP, Java, Ruby, at iba pa. 289 00:24:56,080 --> 00:24:58,980 >> Maghanap sa Google Code ay talagang nagkakahalaga pagbanggit; ito ay isa sa mga 290 00:24:58,980 --> 00:25:05,720 kaugnay sa ilang mga aplikasyon out doon na nagbibigay-daan sa publiko na i-access 291 00:25:05,720 --> 00:25:07,800 ang database na gamit ang mga regular na expression. 292 00:25:07,800 --> 00:25:12,920 Kaya't kung tiningnan mo sa Google Code Search maaari mong makita ang code 293 00:25:12,920 --> 00:25:16,880 kung naghahanap ka para sa isang halimbawa ng kung paano ang isang function na maaaring magamit, 294 00:25:16,880 --> 00:25:21,610 maaari mong gamitin ang isang karaniwang expression upang makita na ang function na ginagamit sa lahat ng uri ng iba't ibang mga kaso. 295 00:25:21,610 --> 00:25:28,000 Maaari kang maghanap ng mga fwrite, at pagkatapos ay maaari mong hanapin ang bandila ng write o basahin 296 00:25:28,000 --> 00:25:32,000 kung ginusto isang halimbawa ng fwrite ginagamit sa kasong iyon. 297 00:25:33,530 --> 00:25:37,010 Kaya ang parehong bagay doon, at narito ang ilang mga sanggunian. 298 00:25:37,010 --> 00:25:40,990 Ito ay magagamit sa online pati na rin, kaya pagpunta pasulong kung 299 00:25:40,990 --> 00:25:45,560 Gusto mo upang tumingin sa Python, grep, Perl - gusto mo lamang upang makakuha ng ilang inspirasyon 300 00:25:45,560 --> 00:25:50,650 o kung nais mong upang tumingin nang higit pa sa teorya narito ang ilang mga mahusay na hangganan ng mundong off ang mga lugar. 301 00:25:50,650 --> 00:25:53,870 Maraming salamat sa inyo. 302 00:25:58,470 --> 00:25:59,910 [CS50.TV]