[Powered by Google Translate] [Seminaras: Pattern Matching su Reguliarūs išsireiškimai] [Jonas Mussman-Harvardo universiteto] [Tai CS50.-CS50.TV] Gerai. Na, laukiami visi. Tai CS50 2012. Mano vardas Jonas, ir aš būsiu kalbėti šiandien apie reguliarios išraiškos. Reguliarūs išsireiškimai yra visų pirma priemonė, tačiau taip pat kartais naudojamas kodu aktyviai esmės atitiktų modelius ir eilutes. Taigi čia interneto Komiksai iš XKCD. Šioje komiksų yra Murder Mystery, kur žudikas turi Po ką nors apie atostogas, ir veikėjai turi ieškoti per 200 megabaitų laiškų ieško adresą. Ir jie apie pasiduoti, kai kas nors, kas žino, reguliarios išraiškos - matyt superherojus - swoops žemyn ir rašo tam tikrą kodą ir išsprendžia nužudymo paslaptį. Taigi, matyt, kad bus kažkas, kad jums bus suteikta teisė daryti Po šio seminaro. Mes tik ketina pateikti glaustą įvadą į kalbą ir suteikti jums pakankamai Būtinas eiti po daugiau išteklių savo. Taigi, reguliarios išraiškos atrodo iš esmės panašus į šį. Tai reguliaraus išraiška Ruby. Tai ne siaubingai skirtingi kalbų. Mes turime tik nuo nerijos ribos pradėti ir pažymėkite reguliaraus išraiška rubinas. Ir tai yra reguliaraus išraiška ieškoti elektroninio pašto adresas modelį. Taigi matome pirmajame tiek atrodo bet raidinę skaitmeninę pobūdžio. Taip yra todėl, elektroninio pašto adresus, dažnai tenka pradėti nuo abėcėlės simbolį. Ir tada bet koks specialus simbolis po simbolio @. Ir tada tas pats domeno pavadinimas. Ir tada nuo 2 iki 4 simbolių ieškoti. Com,. Neto, ir taip toliau. Taigi, kad yra dar vienas reguliaraus išraiška pavyzdys. Taigi, reguliarios išraiškos yra protokolai ieškant patters tekste. Jie palyginti, selekcijos bei pakeitimus naujais. Taigi Trečias pavyzdys yra rasti visus telefonų numerius baigdavosi 54 į katalogą. Taigi prieš David įtrūkimų pirmesniems CS50 kataloge galėtume ieškoti modelis, kur mes turime skliausteliuose po 3 numeriai tada galų skliaustų, 3 daugiau numerių, brūkšnys, 2 numeriai, ir tada 54. Ir, kad būtų iš esmės kaip mes atėjo su reguliaraus išraiška ieškodamas kad. Taigi - mes padarėme keletą dalykų CS50, kad yra šiek tiek panašus reguliarios išraiškos, todėl - pavyzdžiui - į dictionary.C failą už rašybos tikrintuvo problemų rinkinį, kurį galėtų naudoti fscanf skaityti iš žodyno žodį. Ir jūs galite pamatyti procentas 45s ieško kaip 45 simbolių eilutę. Taigi ji yra šiek tiek panašus į elementaraus reguliaraus išraiška. Ir jūs galite turėti visus 45 ženklų, kad tilptų sąskaitą ten ir pasiimti tuos padaryti. Ir tada antras pavyzdys naujausią interneto programavimo problema nustatytas Distro kodo php mes iš tikrųjų turėti paprastą reguliaraus išraiška. Ir tai vienas tiesiog nori patikrinti ar interneto puslapį, kuriame yra perduodama atitinka arba prisijungimu arba atsijungimu užsiregistruoti. PHP. Ir tada grįžti true arba false remiantis ta reguliaraus išraiška atitikimo. Taigi, kai jūs naudojate reguliaraus išraiška? Kodėl tu čia šiandien? Taigi jūs nenorite naudoti reguliarųjį reiškinį, kai yra kažkas, kad daro visą darbą už jus, net lengviau. Taigi, XML ir HTML yra iš tikrųjų gana sudėtinga rašyti reguliarios išraiškos tol matysime truputį. Taigi yra skirta analizatoriai tų kalbų. Jūs taip pat turite būti gerai su kompromisus ir tikslumo dažnai. Jei bandote - taigi matėme įprastą posakį elektroninio pašto adresą, bet sako, kad jūs norėjo tam tikrą elektroninio pašto adresą ir palaipsniui reguliarieji reiškiniai gali tapti sudėtingesnė, nes ji tapo tikslesnės. Taigi, kad būtų vienas kompromisas. Jūs turite būti tikri, kad jūs gerai padaryti su reguliaraus išraiška. Jei tiksliai žinote, ką jūs ieškote, kad jis gali padaryti daugiau prasmės įdėti į laiką ir rašyti efektyviau analizatorius. Ir pagaliau yra istorinė problema su tvarkingumu išraiškų ir kalbų. Reguliarūs išsireiškimai iš tikrųjų yra daug galingesnė, negu reguliarios išraiškos per sakyti oficialiame prasme. Taigi, aš nenoriu eiti per toli į oficialią teoriją, bet dauguma kalbos, kad mes kodas iš tikrųjų nėra teisingi. Ir tai, kodėl reguliarios išraiškos kartais nėra laikomi visi, kad saugus. Taigi, iš esmės yra Chomsky hierarchija kalbomis, ir reguliarios išraiškos yra sukurti naudojant sąjunga, sujungimas, ir kad Klin žvaigždučių operaciją, kuri mes matome per kelias minutes. Jei domina teorija yra gana daug ten vyksta po gaubtu. Taigi Trumpa istorija - tik konteksto čia - reguliarūs rinkiniai atėjo 1950, ir tada mes turėjome paprastus redaktoriai, kad įtraukti reguliarios išraiškos - tiesiog ieško eilutes. Grep - tai yra komandų eilutės įrankis - buvo vienas iš pirmųjų labai populiarus įrankius, kurie įtraukti reguliarios išraiškos 1960. 80-ųjų, Perl buvo pastatyta - tai programavimo kalba, kuri apima reguliarios išraiškos labai gerai. Ir tada visai neseniai mes turėjome Perl suderinamą reguliaraus išraiška protokolai iš esmės kitomis kalbomis, kurios naudoja daug tą pačią sintaksę. Žinoma, svarbiausias įvykis buvo 2008 metais ten, kur buvo pirmasis nacionalinis išraiškų diena, kuris manau yra birželio 1, jei norite švęsti, kad. Vėlgi, tik šiek tiek daugiau teorija čia. Taigi yra pora skirtingų būdų, kaip statyti reguliarios išraiškos. Vienas paprastas būdas yra sukurti išraišką, jūs ketinate paleisti į eilutę interpretuoti - iš esmės sukurti mažai mini programa, kuri analizuojame vienetų eilutę ir pamatyti, "O, ar tai tinka reguliaraus išraiška, ar ne?" Ir tada paleisti, kad. Taigi, jei turite labai mažą reguliaraus išraiška, tai tikriausiai efektyviausias būdas tai padaryti. Ir tada, jei jūs - dar vienas variantas yra, kad rekonstruojant išraiška, kaip jūs einate, ir kad yra galimybė imituoti. Ir šitie ankstyvieji bandymai reguliariais išraiškos algoritmai gana paprasta ir gana greitai, bet neturėjo daug lankstumo. Taigi, norint padaryti dar kai kurių dalykų, kad mes ketiname pažvelgti į šiandien mes turėjome padaryti sudėtingesnį reguliaraus išraiška diegimas, kurie yra potencialiai daug lėčiau, kad yra kažkas, kad nepamiršti Taip pat reguliariai išraiškos neigimas Atakos įvairovė kad išnaudoti šių naujesnių realizavimo galimybes reguliarios išraiškos tapti labai sudėtinga. Ir panašiai ta prasme, kad matėme buferio perpildymo atakų, turite atakų, kad darbas darant rekursinių kilpas, kad viršyta su atminties talpą. Ir beje Regexen yra viena iš oficialių daugiskaitos reguliaraus išraiška pagal analogiją jaučių į anglosaksų. Gerai, kad Python biblioteka daugelis iš jūsų čia asmeniškai turite Mac, todėl jūs iš tikrųjų galite traukti tai ant ekrano. Reguliarūs išsireiškimai yra pastatytas į Python. Ir taip Python yra pakrautų Mac ir taip pat galima rasti internete adresu šią nuorodą. Taigi, jei jūs žiūrite galite pristabdyti ir įsitikinkite, kad turite Python kaip mes žaisti aplink čia. Yra vadovas internete, todėl, jei jūs tiesiog įveskite Python į kompiuterį pamatysite, kad versija ateina į terminalą. Taigi, aš pateikė nuorodą į vadove Python 2 versija taip pat Cheat sheet. Yra 3 versija Python, bet jūsų Mac nebūtinai ateina su, kad pakrautų. Taigi nelabai skiriasi. Gerai, kad kai naudojant reguliarios išraiškos Python pagrindai. Taigi čia aš labai paprastą išraišką, todėl aš Python importas iš naujo ir tada paėmė re.search rezultatą. Ir paieškos trunka 2 argumentus. Pirmasis yra reguliaraus išraiška, o antrasis yra tekstas arba eilutę norite analizuoti. Ir tada aš atspausdintas iš result.group. Taigi tai yra 2 pagrindinės funkcijos mes ketiname pamatyti šiandien sužinoti apie reguliarios išraiškos. Taigi tiesiog skaidyti tai reguliaraus išraiška čia h, o tada \ w ir m taip \ w tiesiog prisiima kokią abėcėlės raidę ten. Taigi čia mes ieškome už "h" ir tada kitą abėcėlės raidė ir tada m, todėl čia, kad būtų suderinti kumpis IN, "Abraomas Linkolnas ir kumpio sumuštiniai". Tai tos grupės rezultatas. Kitas dalykas, kad mes galime padaryti, tai naudoti mūsų iki teksto eilutes Python. Taigi, manau, aš eisiu į priekį ir patraukite, kad čia. Python importas iš naujo. Ir jei aš buvo padaryti tą patį - tarkim, tekstas, "Abraomas" mums padidinti - ten mes einame. Tekstas, tardamas: "Abraomai valgo kumpis". Gerai, tada Rezultatas = re.search. Ir tada mūsų išraiška gali būti h, tada aš darysiu dot m. Taigi taškas tereikia bet kokius simbolius, kad yra ne nauja linija įskaitant skaičius, procentinio ženklai, nieko panašaus. Ir tada tekstas - bumas - ir tada result.group--taip. Taigi, tai tik kaip įgyvendinti pagrindines funkcijas čia. Jei mes turėjome teksto žiedas, - kad proto tekstą - įtraukti pasakyti daug atgal nerijos ribos ir styginiams viduje ir viskas, kad galėtų atrodyti pabėgti sekas, tada mes tikriausiai norėsite naudoti žalio teksto įvesties įsitikinti, kad priimtas. Ir tai tik atrodo, kad. Taigi, jei mes ieškojome kiekvienam iš jų ten turėtume rasti nieko. Bet tai kaip jūs jį įgyvendinti; prieš eilutė reguliarieji reiškiniai jūs įtraukėte raidžių r. Gerai, kad mums nesustoti. Visos teisės - todėl leiskite mums pažvelgti į keletą pasikartojančių modelių čia. Taigi vienas dalykas, kurį norite padaryti, tai kartoti dalykus kaip jums ieškoti per tekstą. Taigi, norint padaryti po bet kokio b skaičius - jūs ab *. Ir tada yra kitų taisyklių serija taip pat. Ir jūs galite ieškoti visų šių Up; aš tiesiog paleisti per kai dažniausiai naudojami tie. Taigi ab + yra po bet kuris N didesnis už 0 ir b. ab? yra po 0 arba 1 b. ab {N} yra po N iš b, tada taip toliau. Jei jūs turite 2 numerius klamrowych esate nurodant intervalą kad gali būti galbūt suderinta. Taigi mes išsamiau panagrinėsime pora kartojimu per minutę. Taigi 2 dalykai, kuriuos reikia turėti omenyje, kai naudojant šias modelio atitikimo įrankiai čia. Taigi sako, kad mes norime pažvelgti į HM iš "Abraomas Linkolnas daro kumpio sumuštinių. Taigi aš pakeičiau Abraomas Linkolnas vardą Abraomui. Ir dabar mes ieškome, kas yra grąžinami šioje paieškos funkcija, ir ji tik grįžta kumpis šiuo atveju. Ir ji tai daro, nes paieškos tiesiog natūraliai mano kairę labiausiai eilę. Ir visi reguliarios išraiškos Jei nenurodysite kitaip bus padaryti. Jei mes norėjome rasti viską, šiai funkcijai - Rasti visus. Taigi, kad gali tiesiog atrodyti visus = re.findall ("h.m", tekstas) ir tada all.group (). Visi gamina ir kumpio ir kumpio; šiuo atveju tiek iš Abraomo stygos kumpio. Taigi, kad yra kitas variantas. Didysis. Kitas dalykas, reikia nepamiršti, kad reguliarios išraiškos imtis didžiausia intuityviai. Pažvelkime į šiame pavyzdyje. Mes padarėme, kad paliko didžiausią paiešką čia, ir tada aš bandė didesnį paiešką naudojant Klin žvaigždučių operatorių. Taigi, "Abraomas Linkolnas daro kumpio sumuštiniai", ir aš tik gavau atgal m, kaip rezultatas. Dėl šios klaidos priežastis buvo ta, kad aš galėjo imtis jokių skaičių h, nes man nenurodė nieko eiti tarp h ir m. Tik pavyzdys ten, kad buvo m - tik pavyzdžiai, ten su m, jis ir bet H numerį buvo tik styginių m. Tada aš bandė jį vėl pasakiau: "Gerai, leiskite mums gauti faktinį didžiausią grupę čia." Ir tada aš h. * M, kad sugrįžtų bet kokį simbolių tarp h ir m. Ir jei jūs tik pradedate, ir galvoja: "O, gerai, gerai tai man gauti kumpis "ji iš tikrųjų trunka viską nuo H Abraomo Linkolno visą kelią iki kumpis pabaigos. Tai godus, jis mato h - visa tai kitas tekstas - m, ir kad tai, ką ji mano, in Tai ypač baisiausia - tai funkcija, mes taip pat galime nurodyti, kad ji negali būti godus naudojant kitas funkcijas. Bet tai, ką mes turime nepamiršti, ypač kai žiūri HTML tekstą, kuris yra viena iš priežasčių, reguliarios išraiškos yra sunku HTML. Nes jei turite HTML atvirą žymeklį ir tada daug dalykų viduryje ir tada kai kurie kiti HTML uždarytas tegus gerokai vėliau programoje, ką tik suvalgyti iš jūsų HTML kodas aikštelė galbūt per klaidą. Visos teisės - todėl daugiau specialių simbolių, kaip ir daugelis kitų kalbų, mes pabėgti naudojant velniop. Taigi, mes galime naudoti dot nurodyti bet kokius simbolius išskyrus iš naujos eilutės. Mes galime naudoti pabėgti w nurodyti bet kokią abėcėlės simbolį. Ir pagal analogiją pabėgti D bet koks sveikasis skaičius - skaitmeninis simbolis. Mes galime nurodyti - mes galime naudoti skliausteliuose nurodyti susijusios sąvokos. Taigi, šis sutiktų a, b, arba c. Ir mes taip pat gali patikslinti ar variantų arba a arba b. Pavyzdžiui - jei mes ieškojome keletą galimybių skliausteliuose mes galime naudoti arba operatorius, kaip - todėl leiskite mums grįžti į šiame pavyzdyje čia. O dabar leiskite mums imtis - grįžkime į šiame pavyzdyje čia, ir tada imtis AE - todėl tai turėtų grįžti - manau, kad tai vis dar yra Abraomas. Taigi tai - jei mes visi - puikus. Taigi leiskite mums atnaujinti tekstą čia. "Abraomas valgo kumpį o Hemming savo -. Nors Hemming" Didysis. Viskas. Didysis. Dabar mes kumpis, kumpis, ir apvadą. Nors Hemming - o dūzgiantis jam - o dūzgiantis į hem jį. Didysis. Tas pats dalykas. Dabar viskas grįžta dar tik kumpis, kumpis, ir apsiuvas be įlaipinami į hum arba jam. Puikus - taigi ką daryti, jei mes norėjome pažvelgti tiek, kad - taip, mes taip pat galėtų padaryti jam arba - mes sugrįšime prie to. Gerai - taip - viskas gerai - tose vietose, taip pat galite naudoti Žymeklis arba dolerio ženklas nurodyti, kad jūs ieškote ko nors, yra pradžioje arba eilutę pabaigoje. Arba pradžios arba žodžio pabaiga. Tai yra vienas iš būdų ją naudoti. Gerai - todėl leiskite mums žaisti aplink su šiek tiek didesnis teksto bloko. Tarkime, šią eilutę čia - šį teiginį čia. Reguliariai išraiškos galia, kad jie gali nurodyti modeliai ne tik nustatyti simbolių. Leiskite mums padaryti - vadinkime šį bloką. Tada mes skaityti visa tai in Ir tada - leiskite mums padaryti visus =; tai kas yra keletas dalykų, mes galime ieškoti čia pelningai? Mes galime ieškoti išraiškos ausies. Nėra labai įdomu. Kaip apie tai? Mes pamatyti, kas atsitiks. Aš davė jai problemą. Taigi bet koks dalykų prieš naujo ir viskas. Taigi, kad turėtų grąžinti viską, nuo pradžios iki visa naujo gal porą kartų. Ir tada čia mes turime reguliariai išraiškos galia, kad jie galite nurodyti modelius ne tik ženklai čia yra. Taigi visą kelią iki galutinio naujo, jis pradėjo su kairėje labiausiai ir buvo godus. Pažiūrėkime - ką dar galėtume ieškoti. Manau, vienas dalykas, jei buvo įdomu ieško įvardžių ji ir jis, galite patikrinti S yra lygus 0 arba 1 ir išraiška jis, ir tai tikriausiai nesiruošia grįžti - Oh, aš manau, kad jis grįžo jis, nes mes ieškome ne galios, tą dieną, čia yra. Stenkimės, nurodant, kad tai turi ateiti į kažką pradžioje. Leiskite mums pamatyti, jei tai nebebus. Taigi, mes galime padaryti, riebalų, ir mes negalime gauti nieko, nes ji ir jis nepasitaiko šios frazės. Didysis. Gerai - todėl atgal į kačių čia. Taigi sudėtingesnis kenkia smegenims. Taigi tai yra, kodėl mes naudoti reguliarios išraiškos išvengti šių problemų. Taigi, čia yra keletas kitų naudingų režimai galite žaisti aplink su. Mes pažvelgė į paieškos šiandien, bet taip pat galite naudoti rungtynės, Splitas, findall ir grupes. Taigi kitų įdomių dalykų, kuriuos galite padaryti su reguliarios išraiškos, be tik ieško modelių yra vartoti modelį ir turintis visas rungtynes ​​- jos kintamieji - o tada naudojant tuos savo kodą vėliau. Tai gali būti labai naudinga. Kiti dalykai gali būti skaičiavimas. Taigi, mes galime tikėtis egzempliorių, reguliaraus išraiška modelio numeriu, ir kad tai, ką mes galime naudoti grupes. Ir kitų rūšių, taip pat taip pat yra įmanoma. Taigi aš tiesiog noriu kalbėti šiek tiek daugiau apie kitų būdų, galite naudoti reguliarios išraiškos. Taigi vienas labiau pažengusios programa yra Apytikslė atitikimo. Taigi, jei jūs ieškote už laisvę, Julijus Cezaris tekstą, ir pamatysite arba Gaius Julius Caesar arba pavadinimas Julijus Cezaris kitomis kalbomis, tada jūs taip pat norite priskirti šiek tiek svorio, kad šių vertybių. Ir jei ji yra pakankamai arti - jei jis kerta tam tikrą ribą - tuomet jūs norite kad būtų galima priimti Julijus Cezaris. Taigi yra pora įvairių diegiamų už tai per kelias kitas kalbas, taip pat. Čia yra keletas kitų įrankių, Regex pal - patogus mažai app internete patikrinti, ar jūsų reguliarios išraiškos yra sudarytas teisingai. Taip pat yra atskira priemonės, kurias galite paleisti iš darbalaukio kaip Ultra Pico ir taip pat tik kucharskie. Taigi, jei darai projektą, kuris apima reguliarios išraiškos toną tai tikriausiai kur eiti ne šiandien taikymo sritį. Ir tada tiesiog suteikti jums, kaip bendro yra prasmės yra grep "Unix", Perlas turi built-in, ir C yra PCRE už C. Ir tada visos šios kitos kalbos taip pat turi reguliaraus išraiška paketus kad dirbti su iš esmės tą patį sintaksė Mes turime šiandienos skonį. PHP, Java, Ruby ir pan. "Google Code Search" yra iš tikrųjų verta paminėti, tai yra vienas iš santykinai nedaug prašymų iš ten, kad leidžia visuomenei susipažinti jos duomenų bazę, naudojant reguliarios išraiškos. Taigi, jei jums atrodo "Google" kodo paieškoje rasite kodą jei jūs ieškote, kaip funkcija gali būti naudojamas, pavyzdžiui, galite naudoti reguliarųjį reiškinį rasti šią funkciją yra naudojamas visų skirtingų rūšių atvejais. Jūs galite ieškoti fwrite, ir tada jūs galite ieškoti į rašyti vėliava arba skaityti jei norėjo iš fwrite yra naudojama šiuo atveju pavyzdys. Taigi tas pats ten, ir čia yra keletas nuorodų. Tai bus galima rasti internete, taip pat, todėl vyksta į priekį, jei jūs norėsite pažvelgti į Python, grep, Perl - jūs tiesiog norite gauti įkvėpimo arba, jei norite ieškoti daugiau ne teorijos čia yra gerų nušokti vietose. Labai ačiū. [CS50.TV]