[Powered by Google Translate] [Seminè: Modèl Matche ak ekspresyon regilye] [John Mussman-Inivèsite Harvard] [Sa a se CS50.-CS50.TV] Okay. Oke, akeyi tout moun. Sa a se CS50 2012. Non mwen se John, epi mwen pral pale jodi a sou ekspresyon regilye. Ekspresyon regilye se sitou yon zouti, men tou, pafwa itilize nan Kòd aktivman esansyèlman matche ak menm modèl yo epi strings. Se konsa, isit la se yon komik entènèt soti nan xkcd. Nan sa a komik gen yon mistè touye moun kote asasen an gen swiv yon moun an vakans, ak gwo chabwak yo gen Fouye nan 200 megabit nan Imèl kap chèche yon adrès. Apre sa, yo se sou bay moute lè yon moun ki konnen ekspresyon regilye - prezimableman yon superhero - swoops desann epi ekri kèk Kòd epi rezoud mistè a touye moun. Se konsa, prezimableman ke yo pral yon bagay ke ou yo pral pouvwa fè Apre sa, seminè. Nou ap jis ale nan bay yon entwodiksyon brèf nan lang la ak ba ou ase Kisa n 'ale dèyè plis resous sou pwòp ou yo. Se konsa, regilye ekspresyon gade fondamantalman tankou sa a. Sa a se yon ekspresyon regilye nan Ruby. Li se pa fò anpil diferan atravè lang yo. Nou gen jis sou bar yo kòmanse epi make ekspresyon ki regilye nan Ruby. Lè sa a se yon ekspresyon regilye nan gade pou nan modèl adrès elektwonik ou. Se konsa, nou wè nan ti jan nan premye sanble pou nenpòt ki karaktè alfa. Sa se paske adrès imel souvan gen kòmanse ak yon karaktè alfabetik. Lè sa a, nenpòt karaktè espesyal ki te swiv pa senbòl @. Lè sa a, menm bagay la pou non domèn. Lè sa a, ant 2 ak 4 karaktè yo gade pou com la.,. Nèt, ak sou sa. Se konsa, ki se yon lòt egzanp nan ekspresyon regilye. Se konsa, regilye ekspresyon yo se pwotokòl pou jwenn patters nan yon tèks. Yo fè konparezon, seleksyon, ak ranplasman. Se konsa, yon egzanp twazyèm se jwenn tout nimewo telefòn mete fen nan 54 an yon anyè. Se konsa, anvan David dechir moute anyè a CS50 nou te ka fè rechèch pou yon modèl kote nou gen parantèz Lè sa a, 3 nimewo Lè sa a, fini parantèz, 3 plis nimewo, yon priz, 2 chif, ak Lè sa a 54. Men, ki ta ka esansyèlman ki jan nou vini ak yon ekspresyon regilye pou fè rechèch pou sa. Se konsa, gen - nou te fè kèk bagay sa yo nan CS50 ki yon ti jan tankou ekspresyon regilye, se konsa - pou egzanp - nan dosye a dictionary.C pou mete nan pwoblèm chèk eple ou ka te itilize fskanf li nan yon mo ki soti nan diksyonè a. Men, ou ka wè 45s la pousantaj se kap chèche yon afè de 45 karaktè. Se konsa, li se yon ti jan tankou yon ekspresyon estanda regilye. Epi ou ka gen nenpòt karaktè 45 ki anfòm bòdwo a nan gen epi chwazi sa yo moute. Lè sa a, egzanp nan dezyèm nan pwoblèm nan pwogram entènèt ki pi resan mete nan Kòd la distribisyon pou php nou aktyèlman fè gen yon senp ekspresyon regilye. Lè sa a yonn, se jis tou senpleman kap yo tcheke si paj wèb la ki te pase nan matche ak swa login oswa Logout enskri. PHP. Lè sa a, retounen vrè oswa fo ki baze sou ki matche ekspresyon regilye. Se konsa, lè ou itilize regilye ekspresyon? Poukisa ou isit la jodi a? Se konsa, ou pa vle sèvi ak regilye ekspresyon lè gen nan yon bagay ki fè travay la pou ou menm pi fasil. Se konsa, XML ak HTML yo aktyèlman trè difisil yo ekri ekspresyon regilye pou jan nou pral wè nan yon ti kras. Se konsa, gen analizeur devwe pou moun ki lang yo. Ou bezwen tou ap gen pwoblèm ak konpwomi nan komès ak presizyon souvan. Si ou yo ap eseye - Se konsa, nou te wè yon ekspresyon regilye pou yon adrès imel, men di ou te vle yon adrès imel espesifik ak piti piti a regilye ekspresyon ta ka vin pi konplèks jan li te vin pi plis presi. Se konsa, ki ta ka yon sèl komès la. Ou gen yo dwe asire ke ou ap oke fè avèk ekspresyon regilye a. Si ou konnen ekzakteman ki sa ou ap chèche pou li ta ka fè plis sans yo mete nan tan la ak ekri yon analizeur pi efikas. Epi finalman gen yon pwoblèm istorik ak regilarite a nan ekspresyon ak lang yo. Ekspresyon regilye nan reyalite pi plis pouvwa anpil pase ekspresyon regilye pou chak di nan yon sans fòmèl. Se konsa, mwen pa ta vle ale twò lwen nan teyori a fòmèl, men pifò lang ke nou Kòd nan aktyèlman yo pa regilye. Lè sa a se poukisa ekspresyon regilye pafwa pa konsidere kòm tout sa ki an sekirite. Se konsa, fondamantalman gen yon yerachi Chomsky pou lang, ak ekspresyon regilye yo bati lè l sèvi avèk sendika, Anchènman, ak operasyon nan zetwal Kleene ke nou pral wè nan kèk minit. Si w enterese nan teyori gen byen yon anpil ale sou la anba kapo a. Se konsa, yon istwa kout - jis pou kontèks la isit la - ansanm regilye li moute soti deyò nan ane 1950 yo, ak Lè sa a, nou te gen editè senp ki enkòpore ekspresyon regilye - jis pou chèche strings. Grèp - ki se yon zouti liy lòd - se te youn nan premye a trè popilè zouti ki enkòpore ekspresyon regilye nan ane 1960 yo. Nan '80s yo, pèrl te bati - se yon lang programmation ki genyen ladan ekspresyon regilye trè gwo lo a. Lè sa a, pi plis dènyèman nou te genyen pèrl konpatib ekspresyon regilye pwotokòl fondamantalman nan lòt lang yo ki itilize anpil nan sentaks la menm. Natirèlman evènman ki pi enpòtan an te an 2008 kote te gen premye Nasyonal la regilye ekspresyon jounen an, ki mwen kwè se 1 jen si ou vle selebre sa. Yon fwa ankò, jis yon ti jan ti kras pi plis teyori isit la. Se konsa, gen yon koup diferan fason pou konstwi ekspresyon regilye. Yon fason ki senp se bati ekspresyon la ke ou yo ale nan kouri sou fisèl la entèprete - fondamantalman bati yon ti kras mini-pwogram ki pral analize moso nan yon kòd ak wè, "O, sa a anfòm ekspresyon ki regilye oswa ou pa?" Lè sa a, kouri sa. Se konsa, si ou gen yon ekspresyon anpil ti regilye, sa a se pwobableman fason ki pi efikas fè li. Lè sa a, si ou - yon lòt opsyon se kenbe rekonstwi a ekspresyon tankou ou ale, e se pou posibilite estimilan. Apre sa, tantativ bonè nan algoritm ekspresyon regilye yo te relativman senp ak relativman vit, men pa t 'gen yon anpil nan fleksibilite. Se konsa, yo fè menm kèk nan bagay sa yo ke nou pral gade nan Jodi a nou gen te fè ekspresyon pi konplèks regilye en ki potansyèlman anpil pi dousman; se konsa ke se yon bagay yo met nan tèt ou Genyen tou yon regilye ekspresyon refi varyete atak ki esplwate potansyèl la pou sa yo en plus nan ekspresyon regilye yo vin trè konplèks. Ak nan anpil sans a menm ki nou te wè nan atak debòde tanpon, ou gen atak ki travay pa fè pasan repetitif ki vin sènen kapasite nan memwa. Ak nan chemen an Regexen se youn nan pliryèl ofisyèl yo nan ekspresyon regilye pa analoji bèf nan Anglo Saxon la. Oke, kidonk Bibliyotèk Piton anpil nan nou isit la nan moun gen Macs, konsa ou ka aktyèlman rale sa a moute sou ekran an. Ekspresyon regilye yo bati nan Piton. Se konsa, Piton se precharje sou Macs ak tou disponib sou entènèt nan lyen sa a. Se konsa, si w ap gade ou kapab pran yon poz, epi fè sèten ou gen Piton kòm nou jwe alantou isit la. Gen yon sou entènèt manyèl, se konsa si ou jis tape Piton nan òdinatè w lan ou pral wè ke vèsyon an vini leve nan tèminal la. Se konsa, mwen bay yon ap mennen nan manyèl la pou Haitian Creole 2 nan Piton kòm byen ke yon fèy tronpe. Gen yon Version 3 nan Piton, men Mac ou a pa nesesèman vini ak ki precharje. Se konsa, pa fò anpil diferan. Oke, kidonk kèk Basics nan lè l sèvi avèk ekspresyon regilye nan Piton. Se konsa, isit la mwen itilize yon ekspresyon trè senp, se konsa mwen te fè Piton re enpòte epi li pran rezilta a nan re.search. Ak rechèch la pran 2 agiman. Premye a se ekspresyon ki regilye, ak dezyèm la se tèks la oswa fisèl ou vle analize. Lè sa a, mwen enprime soti result.group la. Se konsa, sa yo, se 2 fonksyon debaz yo nou pral wè jodi a nan aprann sou ekspresyon regilye. Se konsa, jis kraze desann sa a ekspresyon regilye isit la h ak Lè sa a \ w ak Lè sa a m konsa \ w jis aksepte nenpòt karaktè alfabetik an la. Se konsa, isit la nou yo ap chèche pou yon "h" ak Lè sa a, yon lòt karaktè alfabetik ak Lè sa a m, se konsa isit la ki ta ka matche ak janbon nan, "Abraham Lincoln ak janbon sandwich." Sa a se rezilta a nan gwoup sa a. Yon lòt bagay ke nou ka fè se sèvi ak strings anvan nou yo nan tèks nan Piton. Se konsa, mwen devine mwen pral ale pi devan epi rale ke moute isit la. Piton re enpòte. Men, si m 'te fè menm bagay la - se pou nou di tèks se, "Abraram," Se pou nou rale nan - gen nou ale. Tèks se, "Abraram manje janbon." Oke, ak Lè sa a lakòz = re.search. Lè sa a, ekspresyon nou ka h, ak Lè sa a, mwen pral fè dot m. Se konsa, dot jis pran nenpòt ki karaktè ki se pa yon liy nouvo ki gen ladan nimewo, pousantaj siy, anyen tankou sa. Lè sa a, tèks - boom - ak Lè sa result.group-wi. Se konsa, ki se jis ki jan aplike debaz fonctionnalités isit la. Si nou te gen yon bag tèks ki - ki fou tèks - enkli di anpil bagay nan bar tounen ak strings andedan ak bagay sa yo ki ta ka gade tankou sekans chape, Lè sa a, nou pwobableman vle sèvi ak opinyon nan tèks anvan tout koreksyon a asire w ke yo aksepte. Men, ki jis sanble tankou sa. Se konsa, si nou te kap chèche chak nan yo nan gen nou pa ta dwe jwenn anyen. Men sa se ki jan ou ta aplike li; jis anvan fisèl la nan ekspresyon ki regilye ou mete r nan lèt yo. Oke, kidonk se pou nou kenbe prale. Tout dwa - se konsa se pou nou gade yon modèl koup repetitif isit la. Se konsa, yon sèl bagay ke ou vle fè se repete bagay sa yo kòm w ap chèche nan tèks. Se konsa, fè yon te swiv pa nenpòt ki kantite b - ou fè ab *. Lè sa a, gen yon seri de lòt règ tou. Epi ou ka gade tout moun sa yo moute; mwen pral jis kouri nan kèk nan la pi souvan itilize yo menm. Se konsa, AB + se yon ki te swiv pa nenpòt N pi gran pase 0 nan b. AB? se yon. ki te swiv pa 0 oswa 1 nan b ab {N} se yon ki te swiv pa N nan b, ak Lè sa a, sou sa. Si ou gen 2 nimewo nan aparèy òtopedik yo Curly w ap espesifye yon seri ki kapab pètèt matche. Se konsa, nou pral gade plis nan yon modèl koup repetitif nan yon minit. Se konsa, 2 bagay sa yo kenbe nan tèt ou lè w ap itilize sa yo modèl matche zouti isit la. Se konsa, di nou vle gade nan HM la nan, "Abraham Lincoln fè sandwich Kam yo." Se konsa, mwen chanje non Abraham Lincoln te genyen bay Abraram. Epi, koulye a nou ap chèche pou ki sa ki tounen pa fonksyon sa a rechèch la, ak li sèlman retounen Kam nan ka sa a. Men, li fè sa pou sa paske rechèch jis natirèlman pran keu la bò gòch ki pi. Apre sa, tout ekspresyon regilye sof si ou presize otreman pral fè sa. Si nou te vle jwenn tout gen yon fonksyon pou sa - jwenn tout. Se konsa, ki ta ka jis gade tankou tout re.findall = ('h.m', tèks) ak Lè sa a all.group (). Tout pwodui tou de Kam ak Kam yo: nan ka sa a tou de strings yo nan Abraram chak Kam yo. Se konsa, ki se yon lòt opsyon. Great. Bagay la lòt kenbe nan tèt ou se ke ekspresyon regilye pran pi gwo a entwitif. Se pou nou gade nan egzanp sa a. Nou te fè sa bò gòch rechèch pi isit la, ak Lè sa a mwen te eseye yon rechèch pi gwo lè l sèvi avèk operatè a zetwal Kleene. Se konsa, pou, "Abraham Lincoln fè sandwich Kam," epi mwen sèlman te tounen m kòm yon rezilta. Rezon ki fè la pou sa erè te ke mwen te ka yo te pran nenpòt ki kantite h paske mwen pa t 'presize anyen yo ale nan ant h ak m yo. Egzanp a sèlman gen ki te gen M - egzanp yo sèlman la ansanm ak m nan li ak nenpòt ki kantite a h te jis m nan fisèl. Lè sa a, Mwen te eseye l 'ankò, mwen te di, "Oke, se pou nou jwenn vrè gwoup la pi gwo isit la." Lè sa a, mwen te fè h. * M, se konsa ke jis retounen nenpòt ki kantite karaktè ant h ak m yo. Men, si ou se jis kòmanse deyò epi yo panse, "O, oke, byen sa a pral jwenn m 'Kam, "li aktyèlman pran tout bagay soti nan h la nan Abraham Lincoln tout wout la jiska fen pitit Kam yo. Li se visye, li wè h - tout tèks sa a lòt - m, e ke se sa li pran pous Sa a se yon patikilyèman flagran - sa a se yon karakteristik sa nou kapab tou presize pou li pa dwe visye lè l sèvi avèk fonksyon ak lòt. Men, sa a se yon bagay nou dwe kenbe nan tèt ou espesyalman lè yo kap nan tèks HTML, ki se yon rezon ki fè ekspresyon regilye yo difisil pou HTML. Paske si ou genyen yon HTML tag louvri, epi Lè sa a, anpil bagay nan mitan an ak Lè sa a kèk HTML lòt fèmen tag pita anpil nan pwogram nan, ou gen sèlman manje moute yon anpil nan Kòd HTML ou petèt pa erè. Tout dwa - se konsa plis espesyal karaktè, tankou plizyè lang lòt, nou chape anba lè l sèvi avèk koupe la. Se konsa, nou ka sèvi ak dot la ou presize nenpòt karaktè eksepte pou yon liy nouvo. Nou ka sèvi ak w la chape ou presize nenpòt karaktè alfabetik. Men, pa d chape analoji pou nenpòt ki nonb antye ki pè - nimerik karaktè. Nou ka presize - nou kapab itilize parantèz ou presize ekspresyon ki gen rapò. Se konsa, sa a ta aksepte yon b,, oswa c. Epi nou kapab tou presize oswa opsyon pou swa yon oswa b. Pou egzanp - si nou te kap chèche posiblite miltip nan parantèz nou te ka sèvi ak operatè a oswa kòm nan - se konsa se pou nou tounen nan egzanp sa a isit la. Epi, koulye a se pou nou pran - se pou nou tounen nan egzanp sa a isit la, ak Lè sa a, pran AE - Se konsa, sa a ta dwe retounen - Mwen devine sa a se toujou Abraram. Se konsa, sa a - si nou fè tout sa - gwo. Se konsa, kite nou mete tèks la isit la. "Abraram manje janbon pandan y ap aèm l '-. Pandan y ap aèm" Great. Tout. Great. Koulye a, nou jwenn Kam, Kam ak tout woulèt. Pandan ke aèm - pandan y ap imite chante l '- pandan y ap imite chante tout woulèt l'. Great. Menm bagay. Koulye a, tout retounen toujou jis Kam, Kam ak tout woulèt san yo pa davwa ke yo pran sou hum la oswa l 'la. Gran - Se konsa, sa si nou te vle fè yon gade nan swa sa - se konsa nou ta ka tou fè l 'oswa - nou pral tounen vin jwenn sa. Oke - se konsa - tout dwa - nan pozisyon ou ka tou itilize Lambda la oswa siy a an dola ou presize ke ou ap chèche pou yon bagay nan kòmansman an oswa nan fen yon kòd. Oswa nan kòmansman an oswa nan fen yon mo. Sa se yon fason yo sèvi ak sa. Oke - se konsa se pou nou jwe ak yon blòk yon ti kras pi gwo nan tèks. Se pou nou di ranje sa a isit la - deklarasyon sa a isit la. Pouvwa a nan ekspresyon regilye se yo ke yo ka presize modèl pa sèlman fiks karaktè. Se pou nou fè - se pou nou rele sa a blòk. Lè sa a, nou pral li nan tout sa pous Lè sa a, gen yon - se pou nou fè tout =; Se konsa, sa kèk bagay nou te ka fè rechèch nan isit la ki pwofitab? Nou te kapab gade pou zòrèy la ekspresyon. Pa trè enteresan. Kouman sou sa? Nou pwal wè kisa k ap rive. Mwen te bay li yon pwoblèm. Se konsa, nenpòt ki kantite bagay sa yo anvan re ak tout moun. Se konsa, ki ta dwe retounen tout bagay depi nan konmansman an jiska tout re petèt yon fwa koup. Lè sa a, isit la nou gen pouvwa a nan ekspresyon regilye se yo ke yo ka presize modèl pa sèlman karaktè isit la yo se. Se konsa, tout wout la jiska re final la, li te kòmanse avèk pi plis nan bò gòch e li te visye. Se pou nou wè - ki lòt bagay nou ka gade pou. Mwen devine yon sèl bagay si ou te enterese nan kap chèche pwonon yo li epi li, ou ta ka tcheke pou yo ke yo te egal a 0 oswa 1 ak ekspresyon nan li, e ke sa se pwobableman pa pral retounen - oh, mwen devine li tounen li paske gen nou ap chèche a pouvwa a, jou sa a, yo isit la. Se pou nou eseye ki espesifye ke sa a gen vini nan kòmansman an nan yon bagay. Se pou nou wè si ke gout la. Se konsa, nou ka fè gen anpil grès, epi gen nou pa jwenn anyen paske li epi li pa rive nan fraz sa a. Great. Oke - se konsa tounen nan chat la isit la. Se konsa, konplèks modèl ki mal sèvo a. Se konsa, se pou sa nou itilize ekspresyon regilye pou fè pou evite pwoblèm sa yo. Se konsa, isit la gen kèk lòt mòd itil ou ka jwe otou ak. Nou te gade rechèch jodi a, men ou ka tou itilize matche ak, fann, findall, ak gwoup. Se konsa, lòt bagay fre ou kapab fè avèk ekspresyon regilye san konte jis kap chèche modèl ap pran yon modèl e kenbe tout alimèt yo - varyab li yo - ak Lè sa a lè l sèvi avèk moun ki nan kòd ou pita sou. Sa kapab byen itil. Lòt bagay ta ka konte. Se konsa, nou ka konte kantite ka nan yon modèl ekspresyon regilye, e ke se sa nou ka sèvi ak gwoup pou. Men, lòt mwayen kòm byen yo tou sa posib. Se konsa, mwen jis vle pale yon ti kras plis sou lòt fason ou ka itilize ekspresyon regilye. Se konsa, yon sèl aplikasyon ki pi avanse se nan matche mou. Se konsa, si w ap chèche pou yon tèks pou ekspresyon an, Julius Seza, epi ou wè swa Gayis Julius Seza tande kòz oswa Non Julius Seza tande kòz la nan lòt lang yo, Lè sa a, ou ta ka vle tou bay elèv yo kèk pwa valè sa yo. Men, si li se ase pre - si li kwaze yon papòt sèten - Lè sa a, ou vle pou kapab aksepte Julius Seza li ye. Se konsa, gen yon koup en diferan pou ki nan yon lang kèk lòt kòm byen. Men kèk lòt zouti, rjèks Pal - yon sou la men app ti kras sou entènèt tcheke si ekspresyon regilye ou yo konpoze kòrèkteman. Genyen tou zouti otonòm ke ou ka kouri soti nan Desktop ou tankou Ultra Pico, ak kòm byen ke liv manje jis. Se konsa, si w ap fè yon pwojè ki enplike nan yon tòn ekspresyon regilye sa a se pwobableman plas la ale deyò sijè ki abòde lan jodi a. Lè sa a, jis ba ou yon sans de ki jan komen li se gen grèp nan UNIX, pèrl gen bati-an, ak C gen pkr pou C. Lè sa a, tout bagay sa yo lòt lang yo menm tou yo gen pakè ekspresyon regilye ki ap fonksyone ak esansyèlman sentaks la menm nou te resevwa yon gou nan jounen jodi a. PHP, Java, Ruby, ak sou sa. Google Kòd Search se aktyèlman mansyone vo; li se youn nan la relativman kèk aplikasyon yo deyò ki pèmèt piblik la jwenn aksè nan baz done li yo lè l sèvi avèk ekspresyon regilye. Se konsa, si ou gade sou rechèch Google Kòd ou ka jwenn Kòd si w ap chèche pou yon egzanp sou kouman ta ka yon fonksyon ka itilize, ou ka sèvi ak yon ekspresyon regilye ke ou jwenn ke fonksyon te itilize nan tout kalite ka diferan. Ou te kapab gade pou fwrite, ak Lè sa a, ou ta ka gade pou drapo a nan ekri oswa li si ou te vle yon egzanp fwrite ki te itilize nan ka sa a. Se konsa, menm bagay la gen, ak isit la yo se kèk referans. Sa a pral disponib sou entènèt kòm byen, konsa pral anvwa si ou vle gade nan Piton, grèp, pèrl - ou jis vle jwenn kèk enspirasyon oswa si ou vle gade plis nan teyori a isit la gen kèk sote bon sou kote. Mèsi anpil. [CS50.TV]