[Powered by Google Translate] [Mintegia: Eredua Regular Expressions batera lotu] [John Mussman-Harvard Unibertsitateko] [Hau da CS50.-CS50.TV] Ongi da. Beno, ongi guztiontzat. CS50 hau da, 2012. Nire izena John da, eta hitz egingo dut, gaur izango da adierazpen erregular buruz. Adierazpen erregularrak nagusiki tresna bat da, baina baita ere, batzuetan erabiltzen kodean aktiboki funtsean dator ereduak eta kateak. Beraz, hemen xkcd from web komiki bat da. Komiki horretan hilketa baten misterioa non hiltzailea da jarraitu oporretara norbait, eta protagonista izatea 200 postak helbide baten bila megabyte bilatzeko. Eta eman norbaitek nork daki buruzko adierazpen erregularrak dira - zentzuzkoa superheroia - swoops behera eta kode batzuk idazten eta hilketa misterioa konpontzen. Beraz, zentzuzkoa zerbait duzula ahalmena izango du egin behar izango da, Mintegi honen ondoren. Hasi baino ez gara, sarrera labur bat emateko, hizkuntza joan eman eta baliabideak ematen dizkio nahikoa duzu zure kabuz baliabide gehiago joan ondoren. Beraz, adierazpen erregularrak begiratu funtsean hau atsegin du. Hau Ruby adierazpen erregular bat da. Ez da oso hizkuntza ezberdinetan zehar. Aski barrak dugu eta hasteko markatzeko Ruby adierazpen erregularra. Eta hau, adierazpen erregular bat da helbide elektroniko eredua bilatzeko da. Beraz, lehenengo bit edozein alfanumeriko pertsonaia bilatzen ikusiko dugu. Hau da helbide elektronikoak askotan delako alfabetikoa karakterearekin hasi. Eta, ondoren, izaera berezia edozein @ ikurra eta ondoren. Eta, ondoren, domeinuaren izena gauza bera. Eta, ondoren, 2 eta 4 karaktereak. Com bila,. Net, eta abar. Beraz, adierazpen erregular beste adibide bat da. Beraz, adierazpen erregularrak patters aurkitzeko testu protokoloak dira. Konparazioak, aukeraketa, ordezkatuko dute. Hirugarren adibide bat da, beraz, 54 karpeta batean bukatzen telefono zenbakiak guztiak aurkitzeko. Beraz, David CS50 direktorioa sortu rips aurretik bilatu Ezin izan dugu eredu bat non parentesi dugu, ondoren, 3 zenbakiak parentesi ondoren, amaitzeko, 3 zenbakiak, marratxo bat, 2 zenbakiak, eta, ondoren, 54. Eta hori izango litzateke, funtsean, nola sortu gara, adierazpen erregular bat behar dela bilatzeko. Beraz, ez dira - egin dugu gauza batzuk CS50 direla pixka bat bezala adierazpen erregularrak eta, beraz, - adibidez - en dictionary.C fitxategia ortografia kontrol-arazo multzo bat egiteko erabili ahal izango duzu fscanf hiztegira hitz bat irakurri. Ikusi eta ehuneko 45s da 45 karaktere kate bat bila dezakezu. Beraz, pixka bat da adierazpen erregular baldarra bezala. 45 eta, edozein karaktere egokitzen faktura bertan izan dezakezu eta jaso ere. Eta, ondoren, web berrienak programazio arazoa, adibidez, bigarren ezarri php kodea distro du benetan egin dugu simple adierazpen erregular. Eta bat besterik ez da, besterik gabe, web orrian dagoen bada gainditu egiaztatzeko bila login bai partiduak edo amaitzeko erregistratu. PHP. Eta gero, egia edo gezurra itzuliz oinarritutako adierazpen erregular mezuaren. Beraz, ez adierazpen erregular erabili? Zergatik gaur hemen? Beraz, nahi ez dituzun adierazpen erregular erabili behar den zerbait da duzun lana egiten du, are gehiago, erraz. Beraz, XML eta HTML, egia esan, nahiko zaila adierazpen erregularrak idazteko egingo dugu pixka bat bezala ikusten da. Beraz, ez dira hizkuntza horien parsers dedikatu. Gainera, merkataritza-offs eta zehaztasuna ados izan da maiz. Saiatzen ari zaren bada -, beraz, adierazpen erregular bat ikusi dugu, helbide elektroniko bat egiteko, baina esan jakin bat e-posta helbidea nahi izan duzu, eta pixkanaka Adierazpen erregular konplexuago bihur dezake bihurtu zen, hain zuzen ere. Beraz, merkataritza-off bat izango litzateke. Ziur ari zaren ongi da adierazpen erregular batekin egiten izan behar duzu. Badakizu zehazki zer bilatzen ari zaren bada gehiago zentzurik zitekeen denbora jarri eta eraginkorragoa analizatzaileak bat idazteko. Eta, azkenik, erregulartasuna ez da arazo historiko bat da esamoldeak eta hizkuntza. Adierazpen erregularrak dira benetan askoz indartsuagoa baino adierazpen erregularrak per formal bat zentzu esan. Beraz, ez dut nahi Urrunegi joan formala teoria sartu da, baina gehienak hizkuntza dugu, benetan, kode horiek ez dira aldian-aldian. Hori dela eta, adierazpen erregularrak, batzuetan ez dira seguru duten guztiak. Funtsean, beraz, ez dago hizkuntza Chomsky hierarkia bat da, eta adierazpen erregularrak dira eraikitzeko batasuna, lotura-erabiliz, eta Kleene izar eragiketa egingo dugu minutu batzuk barru ikusi. Duzun interesa baduzu teorian ez dago nahiko asko daude kanpaia azpian joan da. Labur baten historia, beraz, - besterik testuinguruan hemen - erregular multzo sortu 1950eko hamarkadan, eta, ondoren, simple editoreak hori izan genuen sartu espresio erregularrak - besterik kateak bilatzeko. Grep - horrek komando lerroko tresna da - lehen bat izan zen Oso ezaguna Tresna sartu duten adierazpen erregularrak 1960ko hamarkadan. 80ko hamarkada hasieran, Perl eraiki zen - programazio hizkuntza bat da hori badakartza adierazpen erregularrak oso nabarmen. Eta, ondoren, duela gutxi izan dugu Perl espresio erregular bateragarri batez ere, beste hizkuntza batzuetan erabiltzen duten sintaxia bera gehienetan protokoloak. Jakina ekitaldirik garrantzitsuena 2008an izan zen, han izan zen lehen Regular Expressions National Day, hori da, nire ustez, ekainak 1, nahi duzun hori ospatu nahi izanez gero. Berriz ere, besterik gabe, apur bat gehiago, teoria hemen. Beraz, ez dira adierazpen erregularrak eraikitzeko modu ezberdinak pare. Modu sinple bat da adierazpen eraikitzeko ari zaren joan katea exekutatu interpretatzen - funtsean eraikitzeko apur bat mini-programa bat Kate bat pieza aztertuko ditu, eta ikusi, "Oh, ez honetan egokitzen adierazpen erregular edo ez?" Eta gero, hori exekutatu. Beraz, bada, oso txikia adierazpen erregular duzu, hau da, ziurrenik modurik eraginkorrena egin. Eta gero, baduzu - beste aukera bat berreraikitzen mantentzeko adierazpen joan behar da, eta horretarako simulatu aukera da. Eta adierazpen erregular algoritmoak saiakera goiztiar horiek nahiko erraza da eta nahiko azkar, baina ez malgutasuna asko. Beraz, nahiz eta egiteko gauza batzuk garela ikusteko joan gaur egun izan dugu konplexuagoa adierazpen erregular egin duten ezarpenei dira potentzialki askoz motelagoa da; zerbait kontuan hartu da, beraz, Ez da bat ere eraso askotako adierazpen erregular ukatzea ustiatzen duten aplikazio horiek berriago baten potentziala adierazpen erregularrak oso konplexua bilakatzen da. Eta askoz zentzu berean bufferraren gainezkatzea erasoak dugula ikusi da, Lan recursive begiztak hori eginez eraso egin behar duzu inbaditu memoria ahalmena. Eta bide batez Regexen adierazpen erregular ofiziala pluralak bat da du anglosaxoietan en idi analogiaz. Ongi da, beraz, Python Liburutegia asko hemen pertsona dute MACS, beraz, benetan egin dezakezu tira, hau da pantailan. Adierazpen erregularrak dira Python txertatua. Eta, beraz, Python MACS da eta, gainera, online eskuragarri esteka honetan aurrez kargatutako. Beraz, bada, ikusten ari zaren pausatu eta ziurtatu Python izan ditzakezu play dugu inguruan, hemen. Ez dago online eskuliburu bat da, beraz, idatzi besterik ez duzu zure ordenagailuan Python sartu ikusi bertsioak ateratzen terminalean duzu. Beraz, lotura bat emandako dut eskuliburua 2 bertsioa Python baita Cheat orri bat egiteko. Badira bertsioa 3 Python da, baina zure Mac ez du nahitaez aurrekargatutako etorri. Beraz, ez da oso desberdina da. Ongi da, beraz, adierazpen erregularrak erabiliz Python oinarriak batzuk. Beraz, hemen, oso erraza adierazpen bat erabiltzen dut, beraz, Python inportazio re egin nuen eta, ondoren, hartu re.search emaitza. Eta bilaketa 2 argumentu. Lehen, adierazpen erregular bat da, eta bigarrena, testua da edo katea aztertu nahi. Eta, ondoren, inprimatutakoak I result.group du. Horiek, beraz, 2, oinarrizko funtzioak gaur egun ikusten ditugun dira adierazpen erregular buruz ikasteko. Beraz, behera hautsi Adierazpen erregular hau hemen h eta gero \ w, eta gero m beraz \ w besterik ez pertsonaia alfabetoaren edozein onartzen du. Beraz, hemen da "h" baten alde ari gara bilatzen eta, ondoren, beste pertsonaia bat alfabetoaren eta, ondoren, m, beraz, hemen dator urdaiazpikoa litzateke , eta "Abraham Lincoln eta urdaiazpiko ogitarteko". Honek talde horren emaitza da. Beste gauza bat ezin dugula egin da erabili gure testu kateak aurretik Python. Beraz, aurrera egingo dut, eta, tira, hemen uste dut. Python inportazio re. Eta ni gauza bera egin nahi izanez gero - utzi testua izango da, esan digu, "Abraham," utzi gerturatzeko gurekin - ez goaz. Testua, "Abraham urdaiazpikoa jaten." Ongi da, eta, ondoren, emaitza = re.search. Eta gero, gure adierazpen h izan daiteke, eta, ondoren, puntu m egingo dut. Beraz, besterik ez dot edozein karaktere ez dela zenbakiak barne lerro berri bat hartzen du, ehuneko seinaleak, horrelako ezer. Eta gero, testu - boom - eta, ondoren, result.group-Bai. Beraz, hori besterik ez da, nola oinarrizko ezaugarriak ezartzeko hemen. Izan dugu, testu bat duen eraztun badu - Seiko testu - sartuta esan barrak itzuli asko eta kateak barruan eta gauzak ezin katea da itxura, seguruenik, ondoren, nahi dugun gordina testu input Ziur hori onartu egin behar izan du. Eta hori besterik ez dela dirudi. Beraz, bada, horietako bakoitza bertan ziren bilatzen dugu ezin dugu ezer aurkitu. Baina hori nola ezartzeko zenuke; aurretik katearen Adierazpen erregular gutun r jarri duzu. Ongi da, beraz, joan mantentzeko gurekin. Guztiak eskubidea - beraz, begiratu bat errepikakorra bikote ereduak hemen gurekin. Beraz, gauza bat nahi duzun errepikatu egiten da gauzak ari zaren testu bidez bilatzen. Beraz, b edozein zenbaki eta ondoren egin - AB * egin duzu. Eta gero, badaude beste arau-multzo bat ere. , Eta horietan guztietan itxura dezakezu; dut batzuk bidez exekutatu gehien erabiltzen direnak. Beraz, AB + da, edozein b N 0 baino handiagoa izan ondoren. ab? 0 edo 1 b ondoren. da AB {N} bada bat b N ondoren, eta, ondoren, etab. Daukazula 2 kizkur giltza zenbakiak bada sorta bat ari zaren zehaztuz hori, seguru asko, parekatuak izan daiteke. Beraz, gehiago ikusiko dugu, minutu batean bikote errepikakorra ereduak at. Beraz, 2, gauzak gogoan denean ereduarekin bat datorren Tresna horiek hemen erabiliz. Beraz, esan hm du begiratu nahi dugu ", Abraham Lincoln egiten urdaiazpiko ogitarteko". Beraz, Abraham Lincoln-en izena aldatu dut Abraham. Eta orain, zer da hau bilaketa-funtzio itzultzen bilatzen dugu, eta itzultzen bakarrik urdaiazpikoa kasu honetan. Eta horregatik bilatu besterik naturalean Ezkerreko ilaran hartzen du. Guztiak eta adierazpen erregularrak zehaztu ez baduzu, bestela egin egingo dela. Nahi izan dugu, guztiak aurkitu behar bada ez dagoela funtzio bat da - aurkitu guztiak. Beraz, hori besterik ezin guztiak = re.findall ('h.m', testua) itxura eta, ondoren, all.group (). Guztiak bi urdaiazpiko eta urdaiazpikoa ekoizten; kasu honetan bi Abraham kate baten urdaiazpikoa bakoitzean. Beraz, hori beste aukera bat da. Great. Beste gauza kontuan izan behar da, adierazpen erregularrak hartzen duten handiena intuizioa. Ikus dezagun adibide honetan gurekin. Duten ezkerreko gehien bilaketa egin dugu hemen, eta, ondoren, handiagoak bilaketa bat egiten saiatu naiz du Kleene izar operadoreak erabiliz. Hala, "Abraham Lincoln egiten urdaiazpiko ogitarteko", eta lortu dut soilik itzuli ondorioz m. Akats horren arrazoia izan da hartu duten I zitekeen kopurua edozein h egin nuen, ez duelako zehaztu ezer h eta m arteko joan. Adibide bakarra dagoela izan m - adibide bakarra dago m bertan eta h-ren edozein zenbaki besterik ez ziren kate m. Gero, saiatu naiz berriz, esan nuen "Ados, utzi benetako talde handiena gurekin hemen." Eta, ondoren, h nuen. * M, besterik h eta m arteko karaktere kopurua edozein itzultzen beraz. Eta ari zaren besterik ez bada hasten, eta pentsatzen "Oh, ongi, ongi egingo da get me urdaiazpikoa, "hartzen da benetan h dena, Abraham Lincoln-en bidea sortu guztiak urdaiazpikoa amaieran. Greedy da; h ikusten da - honek beste testu guztiak - m, eta horixe da oraindik hartzen du Hau da, bereziki egregious - honen ezaugarri bat ere bidali ahal dugu zehaztu ez da izango Greedy beste funtzioak erabiliz. Baina honek zerbait kontuan hartu behar dugu, batez ere, da Testuaren HTML begira, eta horrek arrazoi bat dela adierazpen erregularrak zaila HTML. Zuk irekitako HTML etiketa eta, ondoren, gauza asko erdian galtzen delako eta, ondoren, beste batzuk itxi HTML etiketa askoz beranduago programan, besterik ez duzu jaten sortu zure kodea HTML asko ziurrenik akats arabera. Guztiak eskubidea - beraz, karaktere bereziak, beste hizkuntza askotan bezala, barra erabiliz ihes egiten dugu. Beraz, puntua erabili ahal izango dugu edozein karaktere zehazteko linea berri bat izan ezik. Ihes w erabili ahal izango dugu, edozein karaktere alfabetiko zehazteko. Eta analogia ihes osokoa edozein d - Zenbakizko izaera. Zehaztu ahal izango dugu - Parentesi erabili ahal izango dugu erlazionatutako adierazpideak zehazteko. Beraz, hau, b, edo c onartuko luke. Eta, gainera, ezin dugu zehaztu, edo bat edo b aukerak. Adibidez - ginen anitz aukerak bila bazabiltza Parentesi edo operadorea erabili ahal izan genuen bezala - beraz, atzera digute adibide hau hemen. Eta orain, utzi gaitu - atzera utzi digute adibide hau, hemen, eta, ondoren, hartu ae - beraz, hau behar itzultzeko - hau da oraindik, Abraham asmatzen dut. Honetan, beraz, - egiten dugun guztiak galtzen - handia. Hargatik testua eguneratzeko hemen. "Abraham urdaiazpikoa jan bitartean bere hemming -. Hemming bitartean" Great. Guztiak. Great. Orain urdaiazpikoa, urdaiazpikoa, eta hem dugu. Hemming bitartean -, berriz zion Humming - to hem Humming zion bitartean. Great. Gauza bera. Gaur egun, oraindik ere, guztiak itzultzen ditu, besterik gabe, urdaiazpikoa, urdaiazpikoa, eta hem picking gogaikarria edo hura gabe. Great - beraz, zer nahi dugu, bai begiratu bada - beraz, ezin izan dugu zion edo - itzuli dugu hori. Ados - beraz - guztiak eskuin - postuetan ere erabil dezakezu kurtsore edo dolarraren ikurra ari zaren hasieran zerbait edo katea baten amaiera bila zehazteko. Edo hasiera edo hitz baten amaieran. Hori horrela erabili behar da. Ados - beraz inguruan jolastu gurekin testu bloke bat baino apur bat handiagoa baita. Let Zutabe hau esan digu, hemen - adierazpen hau hemen. Adierazpen erregular boterea da patroi dutela zehaztu dezakezu ez bakarrik konpondu pertsonaiak. Egin dezagun - utzi bloke honetan deitu. Orduan, oraindik, guztiak irakurri ahal izango dugu Eta, ondoren, ez dute - utzi = guztiak egin digu; beraz, zer gauza batzuk hemen izan dugu bilatu errentagarrian? Adierazpen belarria eman ahal izan dugu. Ez da oso interesgarria da. Nola horri buruz? Zer gertatzen den ikusiko dugu. Eman dut arazo bat. Edozein gauza kopurua re eta guztien aurrean, beraz. Beraz, hasiera-hasieratik, gehienez re guztiak, agian, pare bat aldiz dena itzuliko da. Eta gero, hemen adierazpen erregular boterea da daukagu ​​dute ereduak zehaztu, ezin da besterik karaktere hemen. Horregatik, azken re modu guztiak, hasi ezkerreko gehienak bertan izan zen eta Greedy. Demagun ikusi - zer gehiago ezin bilatuko dugu. Gauza bat asmatu dut zinen izenordainak bila interesa galtzen du, eta berak, s, 0 edo 1 balioa izateagatik ezin duzu egiaztatu eta adierazpena egin zuen, eta hori da, ziurrenik, ez itzuli joan - Oh, zuen itzuli han boterea, egun hartan ari garelako bila, hemen uste dut. Let honek zerbait hasieran etorri zehaztuz saiatu gurekin. Dezagun hori jaisten off ikusteko gurekin. Horretarako gantz ahal izango dugu, eta ez, ez dugu ezer lortu zuen eta zuen delako ez esaldi hau gertatzen. Great. Ados - beraz itzuli katua hemen. Beraz, konplexu ereduak burmuinean da mina. Beraz, hori dela eta, adierazpen erregularrak erabiltzen ditugu gai horiek saihesteko. Beraz, hemen batzuk erabilgarria moduak play inguruan ditzakezu. Begiratu bilatu dugu gaur egun, baina baita dezakezu Partidaren, zatiketa, findall, eta taldeak erabiltzen. Beraz, beste cool gauza adierazpen erregular batekin egin dezakezu, besterik gabe, gainera ereduak bila eredu bat hartzen ari da, eta partida guztiak eskuan - bere aldagai -, eta, ondoren, zure kodea dutenak erabiliz geroago. Hori nahiko lagungarria izan daiteke. Beste gauza kontatuta egon liteke. Beraz, patroia espresio erregular instantzia kopurua zenbatu ahal izango dugu, eta horixe da talde erabili ahal izango dugu. Eta beste moduak eta baita ere izan liteke. Beraz, nahi dut pixka bat gehiago hitz egiteko beste modu batzuk adierazpen erregularrak erabili dezakezu buruz. Beraz, beste bat gehiago aurreratu aplikazioa etortze zalantzazko da. Beraz, bada adierazpena, Julio Cesar testu bat bilatzen ari zaren, eta bai Cayo Julio Cesar izena edo Julio Cesar ikusten duzu beste hizkuntza batzuetan, ondoren, baliteke nahi pisu batzuk esleitzeko balio horiek. Eta ez da aski hurbil badu - zeharkatu zenbait atari bat bada -, ondoren, nahi duzun gai Julio Cesar onartu ahal izateko. Beraz, badaude pare bat desberdinak egiteko aplikazio bat baita gutxi batzuk beste hizkuntza batean. Hona hemen batzuk beste tresna batzuk, Regex Pal - a handy little app online egiaztatu zure adierazpen erregularrak dira, bada, behar bezala osatua. Badira ere standalone Tresna dezakezu zure ordenagailuan exekutatu Pico Ultra, eta baita, besterik gabe, cookbooks bezala. Beraz, bada, proiektu bat adierazpen erregular tona bat inplikatzen ari zara hau da, ziurrenik leku gaur esparrutik kanpo joan. Eta gero, besterik ez dizu nola ohikoa da zentzu ez da grep Unix-en, Perl ditu eraiki-en, eta han C C. PCRE da Eta, ondoren, beste hizkuntza horiek guztiak ere izan adierazpen erregular paketeak hori, funtsean, sintaxia berean, gaur egun, zapore bat lortu dugu lan. PHP, Java, Ruby, eta abar. Google Code Search da, benetan merezi du; bat da gutxi daude, aplikazio horrek ematen dio publikoari sartzeko bere datu-basean adierazpen erregularrak erabiliz. Beraz, bada, begiratu Google Code Search duzun kode aurkitu dezakezu ari zaren nola funtzio bat erabiltzen egon liteke instantzia baten bila bazabiltza, Adierazpen erregular bat erabili ahal izango duzu ari, kasu ezberdinetan, era guztietako erabilitako funtzioa aurkitu. Fwrite eman ahal izango duzu begiratu, eta, ondoren, idatzi jo du ezin begiratuz edo irakurri nahi duzun fwrite ari dira kasu horretan erabilitako adibide bat bada. Beraz, gauza bera dago, eta hemen erreferentzia batzuk. Hau online eskuragarri egongo da, bai eta, beraz, aurreraka joan bada to Python, grep, Perl begiratu nahi duzun - nahi duzu inspirazio batzuk lortzeko edo nahi izanez gero, begiratu teoria at hemen badira leku off jauzia onak. Eskerrik asko. [CS50.TV]