Darbas su reguliariomis išraiškomis „Java“

Turinys
Šiuolaikinėse informacinėse sistemose įprasta matyti paieškos funkcijas, šias funkcijas reikia apdoroti kiekvieną kartą modelius iš daugelio kitų kompleksų. Tam, kad būtų galima konkrečiai apsvarstyti kiekvieną atvejį, prireiktų kelių tūkstančių metų, todėl buvo sukurti mechanizmai, leidžiantys nustatyti suformuluotą paieškų vaizdavimą.
Šias formules rasite taisyklingos išraiškos, kurie leidžia mums nustatyti teksto eilučių vertinimo modelius ir grąžinti teigiamą arba neigiamą reikšmę, jei minėta eilutė atitinka išreikštą formulę.
In „Java“ Įprastas išraiškas galime įgyvendinti paprastai, tačiau tam reikia gana išsamaus kūrėjo tyrimo, kad jis galėtų išmokti įvairių jo elementų.
Tai, kaip galime išreikšti formules, kuriomis galime išbandyti savo modelius su tam tikra kodo konstrukcija, mes tai vadinsime reguliariosios išraiškos sintaksė.
Ką mums leidžia sintaksė?Sintaksė leidžia mums nustatyti modelius pagal tipą simbolį, kiekį, simbolių ir kiekių derinį, pradėkite nuo tam tikro elemento, nustatykite formulės centro išraišką ir pabaigą. Tokiu būdu galime nustatyti labai konkrečius modelius, kurių gali prireikti mūsų programai, arba galbūt tinkamiau filtruoti paiešką tekste ar duomenų bazėje.
Toliau pažiūrėkime nedidelį elementų, dažniausiai naudojamų įprastose išraiškose, sąrašą „Java“, yra daug daugiau elementų, nei parodyta šioje pamokoje, todėl norint patobulinti žinias, rekomenduojama atlikti savo tyrimus:
Eilutės pradžia\^ Naudodami šį elementą mes nurodome toliau „Java“ kuri pradeda eilutę reguliariojoje išraiškoje.
Eilutės pabaiga$ Šiuo simboliu nurodome, kad baigėme eilutę.
Simbolių sąrašas[] Naudodami skliaustus, reguliariai išraiškai nurodome, kad ji turėtų ieškoti bet kurio iš sąrašų.
Neįtraukti[\^] Tai leidžia mums pasirinkti bet kurį simbolį, kuris nėra išvardytas.
Kvantorius{j, k} Raskite, kas yra j nurodytų kartų skaičius k; {j,} šiuo antruoju atveju, kad ir kas būtų j vieną ar daugiau kartų; pagaliau {j} rodo, kad turėtų būti rodoma tai, kas yra j tik vieną kartą.
Žodžių simboliai\ w Raskite simbolius, kurie priklauso žodis, bet jei naudosime \ W priešingai, randami nepriklausantys simboliai.
Skaitmenys\ d Tai leidžia mums suderinti tik skaitmenis ir, jei naudojame \ D mes suderinsime viską, kas nėra skaitmuo ar skaitmuo.
Blankai\ s Tai leidžia mums suderinti tuščias vietas, tokias kaip skirtukai, tarpo klavišas, bet jei naudojame \ S veikia priešingai, jis atitinka viską, kas nėra balta erdvė.
Kaip matome iš šių kelių elementų, galime sukurti įvairius derinius, kuriais galime gauti gana sudėtingus modelius.
Jei norime vieną išbandyti įprasta frazė Prieš sudarydami programą, galime naudoti rubular.com puslapį, kuriame galime įvertinti modelius realiu laiku.

DIDELIS

Mes atliksime paprastą pavyzdį, kuriame išbandysime a įprastą išraišką, kad patvirtintų el, naudosime šiuos dalykus:
[_ a-z0-9-] + (\. [_ a-z0-9-] +) * @ [a-z0-9-] + (\. [a-z0-9-] +) * (\. [az] {2,3}) USD

Pirmiausia į puslapio formos pirmąjį lauką turime įvesti reguliariąją išraišką rubular.com tada lauke vadinamas jūsų bandymo eilutė čia mes ketiname išbandyti skirtingus el. laiškus, kad patikrintume, ar reguliarus veiksnys veikia, pažiūrėkime, kaip elgiasi tikrintojas, kai įvedame netinkamą el. pašto adresą:

DIDELIS

Kaip matome, pavyzdiniame el. Laiške trūksta taško, todėl jis neteisingas ir ne nesudaro atitikmens Naudodami įprastą išraišką, mes ją pataisysime, įdėdami trūkstamą tašką, o patvirtintojas automatiškai generuos teigiamą atsakymą, leidžiantį pamatyti, kad mūsų reguliarioji išraiška veikia be jokių problemų.

DIDELIS

Kaip matome, tai yra labai naudingas šaltinis, kai mokomės naudoti reguliarias išraiškas ne tik „Java“ jei ne kokia nors kalba.
Kai žinome, ką daro kiekvienas iš pagrindinių sintaksės elementų, dabar turime išmokti, kaip padaryti a ieškoti modelio viduje „Java“, tai matome, kokie metodai, klasės ir paketai yra naudojami, kai naudojame įprastas išraiškas.
Pirmas dalykas, kurį turėtume žinoti, yra tai, kad visos šios komunalinės paslaugos yra pakuotėje java.util.regex, todėl norėdami atlikti šiuos pavyzdžius, šį paketą turime įtraukti į savo pamokų pradžią.
Kai tai bus padaryta, mes galime patikrinti modelį tokiu būdu:
 if (ourString.matches (ourExpression)) {// Jei čia atitinka, vykdome kodą} 

Matome, kad naudojame metodą degtukai (), tai įvertins simbolių eilutę pagal reguliaraus reguliavimo modelį ir grąžins tiesa arba klaidinga, jei simbolių eilutė atitinka modelį arba ne.
Šio tipo naudojimas yra tinkamas atliekant mažus patvirtinimus, tačiau jei ketiname naudoti pasikartojantį patvirtinimą, tai yra, jis bus rodomas daug kartų mūsų programoje, geriausia sudaryti nedidelę tvarką ar klasę, kuri leistų įvertinti eilutę parametrų formos, tai yra įprasta ar metodas, leidžiantis įvesti eilutę ir grąžinti teisingą ar klaidingą, jau lyginant su tam tikru modeliu.
Tolesnėje programoje mes išbandysime nedidelį modelį ir įvertinsime jį pagal kelias eilutes, o programa mums pasakys, kuri iš jų yra. rungtynės, tai yra, kuris atitinka ir kuris ne, pažiūrėkime kodą ir tada pamatysime, kaip jis veikia:
 importuoti java.util.regex. *; public class TestPatterns {public static void main (String [] argv) {String pattern = "Q [u] \ d + \."; String [] input = {"QA777. Ar mūsų produkto identifikatorius.", "Quack, Quack, Quack!" }; Raštas p = Pattern.compile (modelis); for (String in: input) {boolean found = p.matcher (in) .lookingAt (); System.out.println ("'" + modelis + "'" + (rasta? "Atitinka" ":" neatitinka "") + + "" "); }}} 

Čia matome, kaip pirmas dalykas, kurį mes darome, yra importuoti šio skyriaus pradžioje minėtą paketą, kad tokiu būdu gautume paieškos pagal įprastas išraiškas funkcijas. Tada mes sukuriame modelį, kurį naudosime kaip mūsų programą, šiuo atveju tai yra modelis, atitinkantis raidę „Q"Tada jis turi turėti bet kokį simbolį, išskyrus raidę"arba“Ir turi baigtis tašku. Tada mes sudarome savo modelį naudodami metodą sudaryti ir mes galime jį panaudoti kurdami rungtynes. Galiausiai, jei modelis atitinka, jis spausdinamas su žodžiu rungtynės kitaip spausdiname tai nesutampa.
Toliau pateiktame paveikslėlyje pažiūrėkime, kaip tai atrodo paleidus programą:

DIDELIS

Tada, kaip paaiškinta, pažymime pirmąją eilutę ar grandinę, jei ji sutampa, bet antroji - ne, ir tolesnei nuorodai pateikiame modelį, kuriuo reikia lyginti.
Dabar atliksime tobulesnį pavyzdį, nustatysime, kuri eilutės atitikmenų dalis yra labai naudinga, kai atliekame teksto paieškas, nes tokiu būdu galėtume paryškinti vartotojo įvestų atitikčių.
Tam naudosime tą pačią ankstesnės programos bazę su tam tikrais pakeitimais, pažiūrėkime kodą ir tada jo paaiškinimą:
 importuoti java.util.regex. *; public class Match {public static void main (String [] argv) {String pattern = "Q [u] \ d + \."; Raštas r = Pattern.compile (modelis); String text = "ID yra: QW990. Bandymo pabaiga!"; Derintojas m = r.matcher (tekstas); if (m.find ()) {System.out.println (modelis + "atitinka \" " + m.group (0) +" \ "viduje \" " + tekstas +" \ ""); } else {System.out.println ("Nėra atitikčių"); }}} 

Dar kartą matome, kaip pradedame savo programą, įskaitant paketą java.util.regex. *. Tada mes naudojame tą patį ankstesnės programos modelį ir sudarome jį pagal metodą sudaryti, įdomus dalykas ateina dabar, mes panaudojome metodą derintojas () surasti atitiktį, o paskui - su metodu rasti () ir metodas grupė () mes galime išgauti būtent tai, kas atitinka, pagaliau padarome atitinkamus ekrano atspaudus. Pažiūrėkime, kaip dabar atrodo mūsų programa:

DIDELIS

Taigi matome, kaip mums pavyko išskirti žodį, kuris tikrai atitinka modelį, kurį mes sudarėme palyginimui įprasta frazė.
Viena iš dažniausiai naudojamų programų yra formos, kur galime atlikti patvirtinimus laiškus, telefono numerius, kredito korteles, slaptažodžius, IP adresus, vartotojo vardus, pašto kodus ir net patvirtinti, kad visos mūsų HTML dokumento žymos yra teisingai uždarytos, taip suteikiant mums galimybę pasiekti didesnį saugumą apdorojant naudotojų įvestą tekstą.
Bet tai galima padaryti ne tik patvirtinant formos laukus, kaip pastebėjome paskutiniame pavyzdyje ilgos teksto paieškos Pagal tam tikrą modelį mes galime sistemingai ieškoti labai sudėtingų teksto dokumentų ir taip sutaupyti daug laiko, tiesiog parašydami nedidelę programą.
Baigę šią pamoką, mes sužinojome, kaip galime pereiti nuo skirtingų elementų prie situacijų mūsų modeliuose išreiškimo ir efektyviai palyginti tekstą ar simbolius, kuriuos norime įvertinti, visa tai dėka taisyklingos išraiškos. Šie vertinimai yra gana greiti, nes kalba yra optimizuojama mūsų siūlomuose metoduose, todėl jie labai tinka sąsajoms, kuriose reikia ieškoti ir patvirtinti vartotojo įvestą tekstą, kurti.Ar jums patiko ir padėjo ši pamoka?Galite apdovanoti autorių paspausdami šį mygtuką, kad suteiktumėte jam teigiamą tašką
wave wave wave wave wave