[Powered by Google Translate] [Semina: Pattern vinavyolingana na mara kwa mara Expressions] [Yohana Mussman-Chuo Kikuu cha Harvard] [Hii ni CS50.-CS50.TV] Sawa. Naam, kuwakaribisha kila mtu. Hii ni CS50 2012. Jina langu ni John, na mimi itakuwa kuzungumza leo juu ya maneno ya kawaida. Maneno ya kawaida kimsingi ni chombo, lakini pia wakati mwingine kutumiwa katika kanuni ya kimsingi kikamilifu mechi ya chati na masharti. Hivyo hapa ni Comic mtandao kutoka XKCD. Katika Comic hii kuna siri ya mauaji ambapo muuaji ana ikifuatiwa mtu juu ya likizo, na wahusika wakuu na kutafuta njia ya megabaiti 200 wa barua pepe kuangalia kwa anwani. Na wao ni kuhusu kutoa wakati mtu ambaye anajua maneno ya kawaida - labda superhero - uvamizi chini na anaandika baadhi ya kanuni na kutatua siri ya mauaji. Hivyo labda hiyo itakuwa kitu ambacho utakuwa uwezo wa kufanya baada ya semina hii. Sisi ni tu kwenda kutoa utangulizi mafupi kwa lugha na kukupa kutosha pata kwenda baada ya rasilimali zaidi juu yako mwenyewe. Hivyo mara kwa mara maneno kuangalia kimsingi kama hii. Hii ni kujieleza mara kwa mara katika Ruby. Ni si sana mbalimbali katika lugha. Tuna tu kwenye mikwaju ya kuanza na alama ya kujieleza mara kwa mara katika Ruby. Na hii ni mara kwa mara kujieleza kwa kuangalia katika barua pepe muundo anwani. Hivyo tunaona saa kidogo kwanza inaonekana kwa tabia yoyote kukosa. Hayo ni kwa sababu anwani za barua pepe mara nyingi kuwa na kuanza na herufi herufi. Na kisha tabia yoyote maalum ikifuatiwa na alama ya @. Na kisha kitu kimoja kwa jina la uwanja. Na kisha kati ya 2 na 4 wahusika kuangalia kwa com., Wavu., Na kadhalika. Hivyo kwamba ni mfano mwingine wa kujieleza kwa mara. Hivyo mara kwa mara maneno ni itifaki kwa ajili ya kutafuta patters katika maandishi. Wao kufanya kulinganisha uchaguzi, na replacements. Hivyo mfano wa tatu ni kutafuta namba zote za simu kuishia katika 54 katika orodha. Hivyo kabla ya rips Daudi hadi saraka CS50 tunaweza kutafuta muundo ambapo tuna mabano kisha 3 idadi kisha mwisho mabano, 3 zaidi ya idadi, dash, namba 2, na kisha 54. Na kwamba itakuwa kimsingi jinsi sisi kuja na kujieleza kwa mara ya kutafuta kwa ajili hiyo. Hivyo kuna - tumefanya baadhi ya mambo katika CS50 kwamba ni kidogo kama mara kwa mara maneno, hivyo - kwa mfano - katika faili dictionary.C kwa ajili ya kuweka Spell kuangalia tatizo unaweza kuwa kutumika fscanf kusoma katika neno kutoka kamusi. Na unaweza kuona 45s asilimia ni kuangalia kwa kamba ya wahusika 45. Hivyo ni kiasi fulani kama kujieleza rudimentary mara kwa mara. Na unaweza kuwa na wahusika yoyote 45 kwamba inafaa muswada katika huko na kuchukua wale up. Na kisha mfano wa pili katika tatizo hivi karibuni mtandao programu kuweka katika kanuni distro kwa php sisi kwa kweli kufanya kuwa rahisi kwa mara kujieleza. Na hii ni moja tu kuangalia tu kwa kuangalia kama ukurasa mtandao kuwa ni kupita katika mechi aidha kuingia au logout kujiandikisha PHP.. Na kisha kurudi kweli au uongo msingi kwamba vinavyolingana mara kwa mara kujieleza. Hivyo wakati gani unaweza kutumia usemi mara kwa mara? Kwa nini uko hapa leo? Hivyo hutaki kutumia usemi wa mara kwa mara wakati kuna kitu ambacho anafanya kazi kwa ajili yenu hata kwa urahisi zaidi. Hivyo XML na HTML ni kweli pretty gumu kuandika maneno ya kawaida kwa kama tutakavyoona katika kidogo. Hivyo kuna parsers kujitolea kwa ajili ya lugha hizo. Wewe pia haja ya kuwa sawa na awamu ya pili ya biashara na usahihi mara kwa mara. Kama wewe ni kujaribu - hivyo tuliona kujieleza mara kwa mara kwa anuani ya barua pepe, lakini kusema alitaka maalum barua pepe na hatua kwa hatua kujieleza mara kwa mara ili kuwa ngumu zaidi kama ikawa sahihi zaidi. Hivyo kwamba itakuwa moja ya biashara ya mbali. Una kuwa na uhakika kwamba wewe ni sawa na kufanya na kujieleza kwa mara. Kama unajua nini hasa ni kuangalia kwa hivyo ili kufanya zaidi ya akili kuweka katika muda na kuandika parser ufanisi zaidi. Na hatimaye kuna suala kihistoria na utaratibu ya maneno na lugha. Maneno ya kawaida ni kweli sana na nguvu zaidi kuliko mara kwa mara maneno kwa kusema katika maana rasmi. Hivyo mimi sitaki kwenda mbali sana katika nadharia rasmi, lakini wengi lugha kwamba sisi katika kanuni ya kweli si mara kwa mara. Na hii ni kwa nini maneno ya kawaida wakati mwingine si kuchukuliwa yote salama. Hivyo kimsingi kuna uongozi Chomsky kwa lugha, na maneno ya kawaida ni kujenga kwa kutumia muungano, concatenation, na nyota Kleene operesheni kuwa tutaona katika dakika chache. Kama una nia katika nadharia kuna mengi kabisa kwenda huko chini ya Hood. Hivyo Historia fupi - tu kwa ajili ya mazingira hapa - seti ya mara kwa mara alikuja katika miaka ya 1950, na kisha tulikuwa na wahariri rahisi kwamba kuingizwa maneno ya kawaida - tu kwa ajili ya kutafuta masharti. Grep - ambayo ni ya mstari amri chombo - alikuwa mmoja wa kwanza maarufu sana zana kwamba kuingizwa maneno ya kawaida katika miaka ya 1960. Katika '80s, Perl ilijengwa - ni lugha ya programu kwamba inashirikisha maneno ya kawaida sana maarufu. Na kisha zaidi hivi karibuni tuna alikuwa Perl sambamba mara kwa mara kujieleza itifaki ya kimsingi katika lugha nyingine ya kwamba matumizi mengi ya syntax sawa. Bila shaka tukio muhimu zaidi ilikuwa mwaka 2008 ambapo kulikuwa na mara kwa mara ya kwanza Taifa Expressions Siku, ambayo naamini ni Juni 1 kama unataka kusherehekea kwamba. Tena, kidogo tu nadharia zaidi hapa. Hivyo kuna wanandoa njia tofauti ya ujenzi wa maneno ya kawaida. Moja ya njia rahisi ni kujenga kujieleza kwamba wewe ni kwenda kukimbia juu ya kamba kutafsiri - kimsingi kujenga mdogo wa mpango kwamba kuchambua vipande vya kamba na kuona, "Oh, hii haina fit kujieleza mara kwa mara au siyo?" Na kisha kukimbia kwamba. Hivyo kama una ndogo sana ya mara kwa mara kujieleza, hii pengine ni njia bora zaidi ya kufanya hivyo. Na kisha kama wewe - njia nyingine ni kuweka reconstructing kujieleza kama wewe kwenda, na kwamba ni uwezekano kuiga. Na majaribio haya mapema saa algorithms ya mara kwa mara kujieleza walikuwa rahisi kiasi na kiasi haraka, lakini hakuwa na mengi ya kubadilika. Hivyo kufanya hata baadhi ya mambo ambayo sisi ni kwenda kuangalia leo tumekuwa na kufanya zaidi ya mara kwa mara tata kujieleza utekelezaji kwamba ni uwezekano wa polepole sana, hivyo kwamba ni kitu cha kuzingatia katika Kuna pia mara kwa mara maneno ya kunyimwa aina mashambulizi kwamba kutumia uwezo kwa ajili ya utekelezaji haya ya karibu zaidi ya mara kwa mara maneno kuwa ngumu sana. Na katika mengi hisia sawa kuwa tuliona katika mashambulizi kufurika buffer, una mashambulizi ya kwamba kazi kwa kufanya mizunguko kujirudia kwamba overrun uwezo wa kumbukumbu. Na kwa njia Regexen ni moja ya wingi rasmi wa kujieleza mara kwa mara kwa mlinganisho wa ng'ombe katika Anglo-Saxon. Sawa, hivyo Library chatu wengi wenu hapa katika mtu kuwa Macs, hivyo unaweza kweli kuvuta hii juu ya screen yako. Maneno ya kawaida ni kujengwa katika Python. Na hivyo chatu ni preloaded juu ya Macs na pia online inapatikana katika link hii. Hivyo kama wewe ni kuangalia unaweza pause na kuhakikisha kuwa chatu kama sisi kucheza karibu hapa. Kuna online mwongozo, hivyo kama wewe tu aina chatu ndani ya kompyuta yako utaona kwamba toleo anakuja juu katika terminal. Hivyo mimi zinazotolewa zilizounganishwa na mwongozo kwa Version 2 wa chatu kama vile karatasi ya kudanganya. Kuna Version 3 wa utambuzi, lakini Mac yako haina lazima kuja na kwamba preloaded. Hivyo si sana tofauti. Sawa, hivyo baadhi ya misingi ya kutumia maneno ya mara kwa mara katika Python. Hivyo hapa mimi alitumia usemi rahisi sana, hivyo sikuwa Python kuagiza re na kisha alichukua matokeo ya re.search. Na tafuta inachukua hoja 2. kwanza ni usemi wa mara kwa mara, na ya pili ni Nakala au kamba unataka kuchambua. Na kisha mimi kuchapishwa result.group. Hivyo hawa ni 2 za msingi majukumu sisi ni kwenda kuona leo katika kujifunza juu ya maneno ya kawaida. Hivyo tu kuvunja hii kujieleza mara kwa mara hapa h na kisha \ w na kisha m hivyo \ w tu anapokea tabia yoyote herufi huko. Hivyo hapa sisi ni kuangalia kwa "h" na kisha mwingine tabia herufi na kisha m, hivyo hapa kwamba ingekuwa mechi ham katika, "Abraham Lincoln na ham sandwiches." Hii ni matokeo ya kundi hilo. Kitu kingine kwamba tunaweza kufanya ni kutumia wetu masharti kabla ya asilia katika Python. Hivyo mimi nadhani kwenda mbele na kuvuta kwamba hapa juu. Chatu kuagiza re. Na kama ningekuwa kufanya kitu kimoja - hebu kusema maandishi ni, "Ibrahimu," hebu kuvuta - kuna sisi kwenda. Nakala ni, "Ibrahimu anakula ham." Sawa, na kisha kusababisha = re.search. Na kisha kujieleza yetu inaweza kuwa na h, na kisha mimi kufanya dot m. Hivyo dot tu inachukua tabia yoyote ambayo si ya line mpya ikiwa ni pamoja na namba, asilimia ishara, kitu kama hicho. Na kisha asilia - boom - na kisha result.group-yeah. Hivyo kwamba ni jinsi tu ya kutekeleza utendaji ya msingi hapa. Kama tungekuwa na pete Nakala kwamba - kwamba mambo asilia - pamoja na kusema kura ya mikwaju ya nyuma na masharti ya ndani na mambo ambayo inaweza kuangalia kama Utaratibu wa kutoroka, kisha sisi pengine wanataka kutumia mbichi Nakala pembejeo ili kuhakikisha kwamba ni kukubalika. Na kwamba inaonekana tu kama hiyo. Hivyo kama sisi kuangalia kwa kila mmoja wao katika huko tunapaswa kupata chochote. Lakini hiyo ni jinsi gani kutekeleza; tu kabla ya kamba ya kujieleza kwa mara ya kuweka r barua. Sawa, hivyo basi sisi kuendelea. Yote ya haki - hivyo hebu tuangalie chati wanandoa repetitive hapa. Hivyo jambo moja kwamba unataka kufanya ni kurudia mambo kama wewe ni kutafuta njia ya maandishi. Kufanya hivyo ikifuatiwa na idadi yoyote ya b - kufanya ab *. Na kisha kuna mfululizo wa sheria nyingine pia. Na unaweza kuangalia yote ya juu ya haya; mimi itabidi kukimbia kupitia baadhi ya kawaida kutumika ndio. Hivyo ab + ni ikifuatiwa na yoyote N mkubwa kuliko 0 ya b. ab? ni ikifuatiwa na 0 au 1 ya b. ab {} N ni ikifuatiwa na N ya b, na kisha kadhalika. Kama una 2 idadi katika braces curly wewe ni kubainisha mbalimbali kwamba wanaweza kuwa na uwezekano wa kuendana. Hivyo tutaangalia zaidi katika chati wanandoa repetitive katika dakika. Hivyo 2 mambo ya kukumbuka wakati wa kutumia hizi muundo vinavyolingana zana hapa. Hivyo kusema tunataka kuangalia hm ya, "Abraham Lincoln hufanya sandwiches ham." Hivyo mimi iliyopita jina Abraham Lincoln kwa Ibrahimu. Na sasa sisi ni kuangalia kwa nini ni kurudi kwa kazi hii ya utafutaji, na tu anarudi ham katika kesi hii. Na ni gani kwamba kwa sababu tu tafuta kawaida inachukua kushoto wengi foleni. Na wote maneno ya kawaida isipokuwa wewe bayana vinginevyo kufanya hivyo. Kama sisi alitaka kupata yote kuna kazi ya kuwa - kupata yote. Hivyo kwamba inaweza tu kuangalia kama wote re.findall = ('h.m', maandishi) na kisha all.group (). Wote wawili inazalisha ham na ham; katika kesi hii wote wa masharti katika Ibrahimu ham ya kila aina. Hivyo kwamba ni chaguo jingine. Kubwa. Kitu kingine kukumbuka ni kwamba maneno ya kawaida kuchukua kubwa intuitively. Hebu tuangalie mfano huu. Sisi gani kwamba kushoto wengi tafuta hapa, na kisha mimi alijaribu kutafuta kubwa kutumia Kleene nyota operator. Hivyo kwa ajili ya, "Abraham Lincoln hufanya sandwiches ham," na mimi tu got nyuma m kama matokeo. sababu ya makosa kwamba ilikuwa kwamba mimi naweza wamechukua idadi yoyote ya h ni kwa sababu mimi si kutaja kitu chochote kwenda katika kati h na m. mfano tu pale kwamba alikuwa m - tu kuna mifano na m ndani yake na idadi yoyote ya h walikuwa tu m kamba. Kisha mimi walijaribu tena; nikasema, "Sawa, hebu kupata halisi kundi kubwa zaidi hapa." Na kisha mimi h. * M, ili tu anarudi idadi yoyote ya wahusika kati h na m. Na kama wewe ni mapya tu nje na kufikiri, "Oh, sawa, pamoja na hii kupata yangu ham, "ni kweli inachukua kila kitu kutoka h katika Abraham Lincoln njia yote hadi mwisho wa ham. Ni tamaa; anaona h - Nakala hii wengine wote - m, na kwamba ni nini inachukua in Hii ni hasa egregious - hii ni hulka tunaweza pia bayana kwa kuwa si kuwa na tamaa ya kutumia kazi nyingine. Lakini hili ni jambo tuna kukumbuka hasa wakati kuangalia Nakala HTML, ambayo ni sababu moja kwamba maneno ya kawaida ni vigumu kwa HTML. Kwa sababu kama una HTML tag wazi na kisha kura ya mambo katikati na kisha baadhi HTML nyingine imefungwa tag baadaye sana katika mpango, una kuliwa tu hadi mengi ya maadili yako HTML uwezekano kwa makosa. Yote ya haki - hivyo zaidi maalum wahusika, kama lugha nyingine nyingi, sisi kuepuka kutumia mkwaju. Ili tuweze kutumia dot kutaja tabia yoyote isipokuwa kwa mstari mpya. Tunaweza kutumia w kutoroka kutaja tabia yoyote herufi. Na kwa mlinganisho kutoroka d kwa yoyote integer - namba tabia. Tunaweza kutaja - tunaweza kutumia mabano kutaja maneno kuhusiana. Hivyo hii itakuwa kukubali b, au c. Na tunaweza pia bayana au chaguzi kwa ajili ya ama a au b. Kwa mfano - kama sisi walikuwa wanatafuta uwezekano nyingi katika mabano tunaweza kutumia operator au kama katika - hivyo basi sisi kurudi nyuma kwa mfano hii hapa. Na sasa hebu kuchukua - hebu kwenda nyuma ya mfano huu hapa, na kisha kuchukua ae - hivyo hii lazima kurudi - mimi nadhani hii bado ni Ibrahimu. Hivyo hii - kama sisi kufanya yote - kubwa. Hivyo basi sisi update Nakala hapa. "Ibrahimu anakula ham wakati hemming wake -. Wakati hemming" Kubwa. Wote. Kubwa. Sasa sisi kupata ham, ham, na pindo. Wakati hemming - wakati humming kwake - wakati humming pindo naye. Kubwa. Kitu kimoja. Sasa wote anarudi bado tu ham, ham, na pindo bila kuokota juu ya hum au naye. Kubwa - hivyo nini kama sisi alitaka kuangalia ama kwamba - hivyo tunaweza pia kufanya yeye au - sisi kuja nyuma na kwamba. Sawa - hivyo - haki ya wote - katika nafasi pia unaweza kutumia kareti au ishara ya dola bayana kwamba wewe ni kutafuta kitu mwanzo au mwisho wa kamba. Au mwanzo au mwisho wa neno. Hiyo ni njia moja ya kutumia. Sawa - hivyo basi sisi kucheza karibu na kuzuia kubwa kidogo ya maandishi. Hebu kusema hii mstari hapa - kauli hii hapa. nguvu ya kujieleza mara kwa mara ni kwamba wanaweza kutaja chati si tu fasta wahusika. Hebu kufanya - hebu piga hii block. Basi sisi kusoma yote ya kwamba in Na kisha kuwa - tufanye kila =; hivyo kile ni baadhi ya mambo tunaweza kutafuta katika hapa kwa faida? Tunaweza kuangalia kwa sikio kujieleza. Si ya kuvutia sana. Vipi kuhusu hilo? Tutaweza kuona nini kinatokea. Mimi akampa tatizo. Hivyo idadi yoyote ya mambo kabla ya re na wote. Hivyo kwamba wanapaswa kurudi kila kitu kuanzia mwanzo hadi wote re labda mara ya wanandoa. Na kisha hapa tuna nguvu ya maneno ya kawaida ni kwamba wao Unaweza kutaja chati si tu wahusika hapa ni. Hivyo njia yote hadi mwisho re, ilianza na wengi wa kushoto na alikuwa mchoyo. Hebu angalia - kile kingine tunaweza kuangalia. Mimi nadhani jambo moja kama ungekuwa nia ya kuangalia kwa Viwakilishi yeye na yeye, unaweza kuangalia kwa s kuwa sawa na 0 au 1 na kujieleza yeye, na kwamba ni pengine si kwenda na kurudi - oh, mimi nadhani ni yeye akarudi kwa sababu kuna sisi ni kuangalia nguvu, siku hiyo, hapa ni. Hebu jaribu kufafanua kwamba hii ina kuja katika mwanzo wa kitu fulani. Hebu tuone kama kwamba matone mbali. Hivyo tunaweza kufanya mafuta, na kuna sisi si kupata kitu chochote kwa sababu yeye na yeye si kutokea katika msemo huu. Kubwa. Sawa - hivyo nyuma ya paka hapa. Hivyo tata chati ni kuumiza ubongo. Hivyo kwamba ni kwa nini sisi kutumia maneno ya kawaida ili kuepuka masuala haya. Hivyo hapa ni baadhi ya njia nyingine muhimu unaweza kucheza karibu na. Tuliangalia tafuta leo, lakini pia unaweza kutumia mechi, mgawanyiko, findall, na vikundi. Hivyo nyingine baridi mambo unaweza kufanya na maneno ya kawaida tu badala ya kuangalia kwa chati ni kuchukua muundo na kufanya mechi zote - vigezo wake - na kisha kwa kutumia wale walio katika kanuni yako baadaye. Kwamba inaweza kabisa kusaidia. Mambo mengine yanaweza kuhesabu kura. Hivyo tunaweza kuhesabu idadi ya matukio ya mfano mara kwa mara kujieleza, na kwamba ni nini tunaweza kutumia makundi kwa ajili ya. Na njia nyingine kama vile pia iwezekanavyo. Hivyo mimi tu wanataka kuzungumza kidogo zaidi kuhusu njia nyingine unaweza kutumia maneno ya kawaida. Hivyo moja ya juu zaidi katika maombi ni vinavyolingana fuzzy. Hivyo kama wewe ni kuangalia kwa maandishi kwa ajili ya kujieleza, Julius Caesar, na unaweza kuona ama Gayo Julius Kaisari au jina Julius Kaisari katika lugha nyingine, basi unaweza pia wanataka kuwapa baadhi ya uzito wa maadili hayo. Na kama ni karibu kutosha - kama misalaba kizingiti fulani - basi unataka kuwa na uwezo wa kukubali Julius Caesar. Hivyo kuna wanandoa utekelezaji mbalimbali kwa ajili ya kuwa katika lugha chache nyingine pia. Hapa ni baadhi ya zana nyingine, regex Pal - Handy kidogo programu online kuangalia kama maneno yako ya kawaida ni linajumuisha usahihi. Pia kuna ilio zana kwamba unaweza kukimbia kutoka desktop yako kama Pico Ultra, na kama vile cookbooks tu. Hivyo kama wewe ni kufanya mradi ambao unahusisha tani ya maneno ya kawaida hii pengine ni mahali pa kwenda nje ya wigo wa leo. Na kisha tu kukupa hisia ya jinsi ya kawaida ni kuna Grep katika Unix, Perl ina kujengwa katika, na C kuna PCRE kwa ajili ya C. Na kisha lugha haya mengine yote pia kuwa na fedha za kujieleza mara kwa mara kwamba kazi na syntax kimsingi huo tulipata ladha ya leo. PHP, Java, Ruby, na kadhalika. Kanuni ya Google Search ni kweli kutaja thamani, ni moja ya wachache maombi huko nje kwamba inaruhusu umma kupata database yake kwa kutumia maneno ya kawaida. Hivyo kama wewe kuangalia juu ya Google Search Kanuni unaweza kupata kanuni kama wewe ni kuangalia kwa mfano wa jinsi kazi inaweza kutumika, unaweza kutumia usemi wa mara kwa mara kujua kwamba kazi ya kutumika katika kila aina ya kesi tofauti. Unaweza kuangalia kwa fwrite, na kisha unaweza kuangalia kwa bendera ya kuandika au kusoma kama alitaka mfano wa fwrite kuwa kutumika katika kesi hiyo. Hivyo kitu kimoja huko, na hapa ni baadhi ya marejeo. Hii itakuwa inapatikana online kama vile, hivyo kwenda mbele kama unataka kuangalia Python, Grep, Perl - wewe tu wanataka kupata baadhi ya uongozi au kama unataka kuangalia zaidi katika nadharia hapa ni baadhi ya kuruka nzuri mbali maeneo. Asante sana. [CS50.TV]