[Powered by Google Translate] [Seminar: Pattern Tqabbil ma regolari espressjonijiet]
[John Mussman-Università ta 'Harvard]
[Dan huwa CS50.-CS50.TV]
Okay. Ukoll, kulħadd merħba. Dan huwa CS50 2012.
Jisimni John, u jien se jitkellem llum dwar espressjonijiet regolari.
Espressjonijiet regolari huwa primarjament għodda, iżda ġieli jintużaw ukoll
fil-kodiċi attiv biex essenzjalment jaqblu mudelli u kordi.
Allura hawnhekk komiks web minn XKCD.
F'dan komiks hemm misteru qtil fejn il-qattiel għandha
segwiti xi ħadd fuq vaganza, u l-protagonisti jkollhom
tfittex permezz 200 megabytes ta emails infittxu indirizz.
U huma waslu biex jieqfu meta xi ħadd li jaf espressjonijiet regolari -
preżumibbilment superhero - swoops isfel u jikteb xi kodiċi
u jsolvi l-misteru qtil.
Għalhekk probabbilment li se jkun xi ħaġa li inti se tkun inkarigata li tagħmel
wara dan is-seminar.
Aħna biss se jipprovdu introduzzjoni konċiż lill-lingwa
u jagħtuk biżżejjed mezzi suffiċjenti biex imorru wara aktar riżorsi fuq tiegħek.
>> Espressjonijiet tant regolari look bażikament bħal dan.
Din hija espressjoni regolari Ruby.
Mhuwiex terriblement differenti madwar lingwi.
Għandna biss fuq slashes biex tibda u mmarka l-espressjoni regolari Ruby.
U dan huwa espressjoni regolari biex tfittex fil-mudell indirizz email.
Allura naraw fl-ewwel ftit jistenna għal xi karattri alfanumeriċi.
Dan huwa minħabba indirizzi email spiss ikollhom jibdew b'ordni alfabetiku.
U mbagħad xi karattru speċjali segwita bis-simbolu @.
U allura l-istess ħaġa għall-isem tad-dominju.
U mbagħad bejn 2 u 4 karattri li tfittex l-. Com,. Nett, u l-bqija.
Allura dan huwa eżempju ieħor ta 'espressjoni regolari.
Espressjonijiet tant regolari huma l-protokolli għall-konstatazzjoni patters fit-test.
Huma jagħmlu paraguni, selezzjonijiet, u s-sostituzzjonijiet.
Allura t-tielet eżempju huwa konstatazzjoni-numri tat-telefon li jispiċċa fil-54 f'direttorju.
Allura qabel David RIPs up il-direttorju CS50 nistgħu tfittxija għal
mudell fejn għandna parentesi mbagħad 3 numri mbagħad jispiċċaw parentesi,
3 numri aktar, sing, 2 numri, u mbagħad 54.
U li tkun essenzjalment kif aħna toħroġ bi espressjoni regolari tiftix għal dan.
>> Allura hemm - għamilna xi affarijiet fil CS50 li huma ftit simili
espressjonijiet regolari, sabiex - per eżempju - fil-fajl dictionary.C
għall-jespliċitaw check problema sett jista 'jkollok użati fscanf
biex jaqra fil-kelma mill-dizzjunarju.
U tista 'tara l-perċentwali 45s qed tfittex għal string ta' 45 karattri.
Għalhekk huwa kemmxejn simili espressjoni regolari rudimentali.
U inti jista 'jkollhom xi 45 karattri li jaqblu l-abbozz fil hemm
u pick up dawk.
U mbagħad it-tieni eżempju fil-problema l-aktar riċenti ta 'programmazzjoni web
stabbiliti fil-kodiċi distro għall PHP għandna attwalment ma jkollhom espressjoni regolari sempliċi.
U dan huwa wieħed biss sempliċement tfittex li tivverifika jekk il-paġna web li tgħaddi minn
logħbiet jew login jew logout jirreġistraw. PHP.
U mbagħad jirritornaw vera jew falza bbażata fuq dik tqabbil espressjoni regolari.
>> Allura meta tuza espressjoni regolari?
Għaliex inti hawn illum?
Allura inti ma tridx li jużaw espressjoni regolari meta jkun hemm xi ħaġa li
ma l-impjieg għal inti anki aktar faċilment.
Allura XML u HTML huma attwalment pretty delikata
li tikteb espressjonijiet regolari għal kemm se naraw fil-ftit.
Allura hemm parsers dedikati għall-dawk il-lingwi.
Tridu wkoll tkun okay il kompromessi u eżattezza spiss.
Jekk inti qed jippruvaw - hekk rajna espressjoni regolari għal indirizz email,
imma jgħidu inti riedu indirizz email speċifiku u gradwalment l-
espressjoni regolari tista 'ssir aktar kumplessa hekk kif sar aktar preċiż.
Allura li tkun waħda kummerċ off.
Int għandek tkun żgur li inti okay jagħmlu ma 'l-espressjoni regolari.
Jekk inti taf eżattament dak li qed tfittex jista 'jagħmel aktar sens
biex jitqiegħdu fil-ħin u jiktbu parser aktar effettiva.
U finalment hemm kwistjoni storika mal-regolarità
ta 'espressjonijiet u l-lingwi.
Regolari espressjonijiet huma attwalment ferm aktar b'saħħitha minn
espressjonijiet regolari għal kull jgħidu f'sens formali.
>> So I ma jridu jmorru wisq fil-teorija formali,
imma ħafna lingwi li għandna kodiċi fil-fatt mhumiex regolari.
U dan huwa għaliex espressjonijiet regolari kultant m'humiex meqjusa kollu li sigur.
Allura bażikament hemm ġerarkija Chomsky għal-lingwi,
u espressjonijiet regolari jibnu jużaw union, konkatenazzjoni,
u l-operazzjoni star Kleene li se naraw fi ftit minuti.
Jekk inti interessat fit-teorija hemm pjuttost ħafna għaddej hemmhekk taħt il-barnuża.
>> Allura storja qasira - biss għall-kuntest hawnhekk - settijiet regolari ħarāet
fl-1950, u mbagħad kellna edituri sempliċi li
inkorporati espressjonijiet regolari - biss tiftix ta 'sekwenzi.
Grep - li hija għodda linja ta 'kmand - kien wieħed mill-ewwel
għodod popolari ħafna li inkorporati espressjonijiet regolari fl-1960.
Fis-snin 80, Perl inbniet - hija lingwa ta 'programmar li
tinkorpora espressjonijiet regolari b'mod prominenti ħafna.
U allura aktar reċentement kellna Perl regolari espressjoni kompatibbli
protokolli bażikament f'lingwi oħra li jużaw ħafna mill-istess sintassi.
Naturalment l-aktar avveniment importanti kien fl-2008
fejn kien hemm l-ewwel Espressjonijiet regolari Jum Nazzjonali,
li nemmen li huwa Ġunju 1 jekk inti tixtieq li jiċċelebraw dan.
>> Għal darb'oħra, biss ftit aktar teorija hawn.
Allura hemm modi koppja differenti tal-kostruzzjoni espressjonijiet regolari.
Mod wieħed sempliċi huwa biex tinbena l-espressjoni li inti ser
jimxu fuq il-sekwenza tinterpreta - bażikament jibnu mini-programm ftit li
se tanalizza biċċiet ta string u ara, "Oh, ma dan tajbin l-espressjoni regolari jew le?"
U mbagħad run dan.
Mela jekk għandek espressjoni regolari żgħar ħafna, dan huwa probabbilment
l-aktar mod effiċjenti biex tagħmel dan.
U mbagħad jekk inti - għażla oħra huwa li żżomm l-rikostruzzjoni
espressjoni kif tmur, u li hija l-possibbiltà jissimulaw.
U dawn l-attentati kmieni fil algoritmi regolari espressjoni kienu
relattivament sempliċi u relattivament rapida, iżda ma għandhom ħafna ta 'flessibilità.
Allura biex nagħmlu anke xi wħud mill-affarijiet li aħna ser tħares lejn
llum kellna biex jagħmlu espressjoni regolari aktar kumplessi
implimentazzjonijiet li huma potenzjalment ħafna aktar kajman; hekk li hija xi ħaġa li wieħed iżomm f'moħħu
Hemm ukoll espressjonijiet ċaħda regolari ta 'varjetà attakk
li jisfruttaw il-potenzjal għal dawn implimentazzjonijiet ġodda ta '
espressjonijiet regolari biex issir kumplessa ħafna.
U ħafna fl-istess sens li rajna fl-attakki overflow buffer,
għandek attakki li x-xogħol billi tagħmel linji rikursivi li
qbiż tal-kapaċità ta 'memorja.
U mill-mod Regexen huwa wieħed mill-plurals uffiċjali ta 'espressjoni regolari
b'analoġija għall oxen fil-Anglo-Sassoni.
>> Okay, sabiex il-Librerija Python ħafna minnkom hawn fl-persuna jkollha MACs,
sabiex inti tista 'attwalment pull dan up fuq l-iskrin tiegħek.
Regolari espressjonijiet huma mibnija fil Python.
U għalhekk Python huwa mqabbad fuq MACs u wkoll disponibbli online fuq din ir-rabta.
Mela jekk inti qed jaraw inti tista nieqaf u kun żgur li għandek Python
kif aħna play madwar hawn.
Hemm online manwali, hekk jekk inti biss tip Python fis-kompjuter tiegħek
se tara li l-verżjoni tkun fil-terminal.
So I sakemm link għall-manwal għall-Verżjoni 2 ta Python kif ukoll iqarrqu folja.
Hemm Verżjoni 3 ta Python, iżda Mac tiegħek mhux bilfors
come ma 'dak mqabbad.
Allura mhux terriblement differenti.
Okay, hekk ċerti punti ta 'użu regolari espressjonijiet fil Python.
>> So here I użati espressjoni sempliċi ħafna, so I ma ri-importazzjoni Python
u mbagħad ħa r-riżultat ta re.search.
U t-tiftix tieħu 2 argumenti.
L-ewwel hija l-espressjoni regolari, u t-tieni huwa t-test
jew string inti tixtieq li tanalizza.
U mbagħad I stampata l-result.group.
Allura dawn huma l-funzjonijiet bażiċi 2 nkunu qed tara llum
fit-tagħlim dwar espressjonijiet regolari.
Hekk biss jitkissru din l-espressjoni regolari hawn
siegħa u mbagħad \ w u mbagħad m hekk \ w biss taċċetta kwalunkwe karattru alfabetiku fil hemmhekk.
Allura hawnhekk aħna qegħdin ifittxu għal "h" u mbagħad ieħor karattru alfabetiku
u mbagħad m, hekk hawn li jkunu jaqblu ham
fil, "Abraham Lincoln u perżut sandwiches."
Dan huwa r-riżultat ta 'dak il-grupp.
Ħaġa oħra li nistgħu nagħmlu huwa li tuża spag qabel tagħna ta 'test Python.
So I raden I se jimxi 'l quddiem u iġbed li sa hawn.
Ri-importazzjoni Python.
U jekk jien kienu jagħmlu l-istess ħaġa - ejjew ngħidu test hi,
"Abraham," let us zoom - hemm immorru.
Test hija, "Abraham jiekol perżut."
Okay, u mbagħad jirriżulta = re.search.
U allura l-espressjoni tagħna tista 'tiġi h, u mbagħad I se tagħmel dot m.
Allura dot biss tieħu xi karattru li mhix linja ġdida inklużi n-numri,
sinjali perċentwali, xi ħaġa bħal dik.
U mbagħad test - boom - u mbagħad result.group-'yeah.
Allura li huwa biss kif jimplimentaw funzjonalità bażiċi hawn.
Jekk kellna ring test li - dak it-test crazy - inklużi jgħidu lottijiet ta 'slashes lura
u kordi ġewwa u affarijiet li jistgħu jixbhu sekwenzi ħarba,
allura aħna probabbilment jridu jużaw l-input test prima biex tiżgura li hija aċċettata.
U li biss jistenna bħal dik.
Allura jekk aħna kienu qed ifittxu għal kull wieħed minnhom fil hemm aħna ma nistgħux jsibu xejn.
Iżda dan huwa kif inti jimplimentawha; eżatt qabel l-sekwenza ta '
l-espressjoni regolari inti tpoġġi l-ittra r.
>> Okay, so let us jibqgħu għaddejjin.
Kull dritt - so let us tħares lejn mudelli ripetittivi koppja hawn.
Allura ħaġa waħda li inti trid tagħmel hu li jirrepetu affarijiet
kif inti qed tiftix permezz test.
Allura biex jagħmlu segwit minn kull numru ta 'b - inti tagħmel ab *.
U allura hemm sensiela ta 'regoli oħra wisq.
U inti tista 'tfittex kollha ta' dawn up; I ser biss run permezz xi wħud mill-
aktar komunement użati dawk.
Allura ab + huwa segwit minn kwalunkwe N akbar minn 0 tal b.
ab? huwa segwit minn 0 jew 1 tad b.
ab {} N hija segwita minn N ta 'b, u mbagħad l-bqija.
Jekk għandek 2 numri fil-braces kaboċċi inti tispeċifika firxa
li jista 'jkun possibilment mqabbla.
Allura aħna se tħares aktar lejn mudelli ripetittivi koppja fil-minuta.
Allura 2 affarijiet li wieħed iżomm f'moħħu meta jużaw dawn mudell tqabbil għodod hawn.
Allura ngħid li rridu nħarsu lejn l hm ta ', "Abraham Lincoln jagħmel sandwiches perżut."
So I biddlet isimha Abraham Lincoln li Abraham.
U issa qegħdin infittxu dak li huwa rritornat minn dan funzjoni ta 'tfittxija,
u biss jirritorna perżut f'dan il-każ.
U ma li minħabba search biss naturalment jieħu l-kju xellug aktar.
U l-espressjonijiet regolari sakemm inti tispeċifika inkella se tagħmel dan.
Jekk ridna li ssib kollox hemm funzjoni għal dan - jsibu kollha.
Allura li tista 'tfittex biss bħal kull = re.findall ("h.m", it-test)
u mbagħad all.group ().
Kollha jipproduċi kemm perżut u perżut; f'dan il-każ iż-żewġ irbit Abraham kull perżut.
Allura li hija għażla oħra.
>> Great. Il-ħaġa oħra li wieħed iżomm f'moħħu huwa li espressjonijiet regolari tieħu l-akbar intuwittivament.
Ejja nħarsu lejn dan l-eżempju.
Aħna ma li tfittxija xellug aktar hawn, u mbagħad I attentat tfittxija akbar
jużaw l-operatur star Kleene.
Allura għal, "Abraham Lincoln jagħmel sandwiches perżut," u I biss marret lura
m bħala riżultat.
Ir-raġuni għal dan żball kienet li I setgħet tittieħed kwalunkwe numru ta '
h għaliex I ma jispeċifikaw xi ħaġa li jmorru fl bejn siegħa u m.
L-uniku eżempju hemmhekk li kellhom m - l-uniċi eżempji hemm ma 'm fiha
u kull numru ta 'l-h kienu biss il-m sekwenza.
Imbagħad I ppruvaw darb'oħra; I said, "Okay, let us nikseb il-grupp attwali akbar hawnhekk."
U mbagħad I ma h. * M, hekk li jirritorna kwalunkwe numru ta 'karattri bejn siegħa u m.
U jekk inti kemm bdew u l-ħsieb, "Oh, okay, ukoll dan se
nikseb me perżut, "huwa effettivament jieħu kollox mid-h fil Abraham Lincoln
it-triq kollha sa l-aħħar ta 'perżut.
Huwa greedy; jara h - dan kollu test ieħor - m,
u dan huwa dak li jieħu pulzieri
Dan huwa partikolarment egrarji - dan huwa karatteristika nistgħu wkoll
jispeċifikaw għal ma jkun greedy jużaw funzjonijiet oħra.
Iżda din hija xi ħaġa li għandna li wieħed iżomm f'moħħu speċjalment
meta wieħed iħares lejn it-test HTML, li hi raġuni waħda li
espressjonijiet regolari huma diffiċli għall HTML.
Għaliex jekk għandek tag miftuħa HTML u mbagħad lottijiet ta 'għalf fin-nofs
u mbagħad ftit HTML oħra magħluqa tag ħafna aktar tard fil-programm,
int għadek jittiekel ta 'lott ta HTML code tiegħek possibilment bi żball.
>> Kull dritt - il-karattri tant aktar speċjali, bħal ħafna lingwi oħra,
aħna jaħarbu jużaw il-mmejla.
Allura nistgħu nużaw il-dot li jispeċifika kull karattru ħlief għal xi linja ġdida.
Nistgħu nużaw il-w iskapp għall jispeċifika kull karattru alfabetiku.
U b'analoġija jaħarbu d għal kull numru sħiħ - karattru numeriku.
Nistgħu jispeċifikaw - nistgħu nużaw parentesi li tispeċifika espressjonijiet relatati.
Allura dan se taċċetta a, b, jew c.
U nistgħu wkoll tispeċifika jew għażliet għal jew jew b.
Per eżempju - jekk irridu kienu qed ifittxu possibiltajiet multipli
fil-parentesi nistgħu jużaw l-operatur jew bħala -
so let us go lura għall dan l-eżempju hawn.
U issa ejjew jieħdu - jgħidilna mur lura għall dan l-eżempju hawn, u mbagħad
jieħdu ae - għalhekk dan għandu jirritorna - I raden dan għadu Abraham.
Allura dan - jekk nagħmlu kollox - kbir.
Għalhekk ejjew taġġorna t-test hawn.
"Abraham jiekol ham filwaqt hemming tiegħu -. Filwaqt hemming" Great.
Kollha. Great. Issa irridu jiksbu perżut, perżut, u keffa.
Filwaqt hemming - filwaqt humming lilu - filwaqt humming li hem lilu. Great.
Istess ħaġa.
Issa kollha prospetti għadhom biss perżut, perżut, u keffa mingħajr picking up fuq il-HUM jew il lilu.
Kbira - sabiex dak li jekk ridna li tħares lejn jew li - hekk nistgħu wkoll tagħmel
lilu jew - aħna se terga 'lura għal dan.
Okay - hekk - id-dritt - fil-pożizzjonijiet tista 'wkoll tuża l-caret jew is-sinjal dollaru
jiġi speċifikat li inti qiegħed tfittex xi ħaġa fil-bidu jew fl-aħħar ta 'sekwenza.
Jew il-bidu jew it-tmiem ta 'kelma.
Dan huwa mod wieħed biex tuża dan.
>> Okay - so let us play madwar bi blokka kemmxejn akbar ta 'test.
Ejjew ngħidu din il-filliera hawn - din id-dikjarazzjoni hawn.
Il-qawwa ta 'espressjoni regolari huwa li jkunu jistgħu jispeċifikaw mudelli
mhux biss karattri ffissati.
Ejjew - jgħidilna sejħa dan blokka.
Imbagħad aħna ser jinqara kollha ta 'dak pulzieri
U mbagħad ikollhom a - jgħidilna tagħmel kollha =; iva, liema huma xi affarijiet nistgħu tfittxija fil hawn bi profitt?
Aħna tista 'tfittex għall-widna espressjoni.
Mhux ħafna interessanti. Kif dwar dan? Ser naraw x'jiġri.
I tatha problema.
Allura kull numru ta 'affarijiet qabel ma jerġa u kollha.
Allura li għandhom jirritornaw kollox mill-bidu sa kull ri forsi koppja darbiet.
U allura hawnhekk għandna l-poter ta 'espressjonijiet regolari huwa li dawn
tista 'tispeċifika mudelli mhux biss karattri hawn huma.
Allura l-triq kollha sa l-aħħar mill-ġdid, dan beda bl-aktar xellug u kien greedy.
Ejjew tara - x'iktar jista aħna tfittex.
I raden ħaġa waħda jekk inti kienu interessati fil tfittex l-pronomi hi u hu,
inti tista 'tivverifika għall-i ndaqs 0 jew 1
u l-espressjoni hu, u li hija probabbilment mhux se jirritorna -
oh, I raden huwa lura huwa għaliex hemm aħna qed iħarsu lejn il-poter, dik il-ġurnata, hawn huma.
Let us jippruvaw jispeċifikaw li din għandu jasal fil-bidu ta 'xi ħaġa.
Ejjew ara jekk li l-qtar off.
Allura nistgħu nagħmlu xaħam, u hemm aħna ma jsibux xejn għaliex hi u hu
ma jseħħux fl din il-frażi.
Great. Okay - hekk lura lill-qattus hawn.
Mudelli tant kumplessi huwa dannu-moħħ.
Allura huwa għalhekk li nużaw espressjonijiet regolari biex jiġu evitati dawn il-kwistjonijiet.
>> Allura hawn huma xi modi utli oħra li inti tista 'tilgħab madwar mal.
Ħarisna lejn search illum, imma int tista 'wkoll tuża logħba, maqsuma, findall, u gruppi.
Affarijiet oħra hekk jibred inti tista 'tagħmel ma regolari espressjonijiet minbarra biss
tfittex għal xejriet qed jieħu xejra u ż-żamma l-logħbiet -
varjabbli tagħha - u mbagħad jużaw dawk fil-kodiċi tiegħek aktar tard.
Li jista 'jkun pjuttost utli. Affarijiet oħra jistgħu jiġu għadd.
Allura nistgħu jgħodd in-numru ta 'każijiet ta' mudell espressjoni regolari,
u dan huwa dak li aħna jistgħu jużaw gruppi għall.
U modi oħra kif ukoll huma wkoll possibbli.
So I biss trid titkellem ftit aktar dwar modi oħra tista 'tuża espressjonijiet regolari.
>> Allura wieħed applikazzjoni aktar avvanzata huwa tqabbil fuzzy.
Mela jekk inti qiegħed tfittex għal test għall-espressjoni, Julius Caesar,
u tara jew Gaius Julius Caesar jew l-isem Julius Caesar f'lingwi oħra,
allura inti tista 'ukoll tixtieq li tassenja xi piż li dawk il-valuri.
U jekk huwa qrib biżżejjed - jekk jaqsam ċertu limitu - imbagħad inti tixtieq
biex ikunu jistgħu jaċċettaw Julius Caesar.
Allura hemm koppja implimentazzjonijiet differenti għal dak fil ftit lingwi oħra ukoll.
Hawn huma xi għodda oħra, regex Pal - app ftit handy online biex
jiċċekkjaw jekk espressjonijiet regolari tiegħek huma komposti korrett.
Hemm ukoll għodod standalone li inti tista 'taħdem mill-desktop tiegħek
bħal Pico Ultra, u kif ukoll cookbooks biss.
Mela jekk inti qiegħed tagħmel proġett li jinvolvi ton ta 'espressjonijiet regolari
dan huwa probabbilment l-post biex imorru barra mill-ambitu tal-lum.
U mbagħad biss biex jagħtuk sens ta 'kif komuni huwa
hemm grep fil Unix, Perl għandha mibnija fil-, u C hemm PCRE għall C.
U allura dawn il-lingwi l-oħra kollha jkollhom ukoll pakketti espressjoni regolari
li joperaw essenzjalment l-istess sintassi sirna togħma ta 'llum.
PHP, Java, Ruby, u l-bqija.
>> Google Search Kodiċi huwa attwalment isemmi; huwa wieħed mill-
relattivament ftit applikazzjonijiet hemmhekk li tippermetti lill-pubbliku għall-aċċess
database tagħha jużaw espressjonijiet regolari.
Mela jekk inti tfittex fuq Google Kodiċi Search inti tista 'ssib kodiċi
jekk inti qiegħed tfittex għal eżempju ta 'kif jistgħu jintużaw funzjoni,
inti tista 'tuża l-espressjoni regolari li ssib dik il-funzjoni qed jintużaw f'kull tip ta' każijiet differenti.
Inti tista 'tfittex għal fwrite, u allura inti tista' tfittex l-bandiera ta 'write jew jaqraw
jekk int riedu eżempju ta fwrite jintużaw b'dan il-każ.
Allura l-istess ħaġa hemmhekk, u hawn huma xi referenzi.
Dan se jkun disponibbli online kif ukoll, sabiex tmur quddiem jekk
inti tixtieq li tħares lejn Python, grep, Perl - inti biss tixtieq li tikseb xi ispirazzjoni
jew jekk inti tixtieq li tħares aktar fil-teorija hawn huma xi wħud jumping off tajba postijiet.
Grazzi ħafna.
[CS50.TV]