Jobber med vanlige uttrykk i Java

Innholdsfortegnelse
I dagens informasjonssystemer er det normalt å se søkefunksjoner, disse funksjonene må behandles hver gang mønstre av mange flere komplekser. For å kunne vurdere hvert enkelt tilfelle vil det ta noen tusen år, og det er derfor det er utviklet mekanismer som gjør det mulig å etablere en formulert representasjon av søk.
Disse formlene finnes i vanlig uttrykk, som lar oss etablere mønstre for å evaluere tekststrenger og returnere en positiv eller negativ verdi hvis strengen tilsvarer den uttrykte formelen eller ikke.
I Java Vi kan implementere vanlige uttrykk på en enkel måte, men dette krever en ganske omfattende studie av utvikleren slik at han kan lære de forskjellige elementene den har.
Måten vi kan uttrykke formlene for hvordan vi kan teste våre mønstre med en bestemt kodekonstruksjon, vi kommer til å kalle dette syntaks for vanlig uttrykk.
Hva tillater syntaksen oss?Hva syntaksen tillater oss er å etablere mønstre etter type tegn, mengde, kombinasjon av tegn og mengder, start med et bestemt element, sett et uttrykk for midten av formelen og en slutt. Med dette kan vi identifisere veldig spesifikke mønstre som kan være nødvendige i programmet vårt, eller kanskje filtrere et mer adekvat søk på en tekst eller en database.
La oss se nedenfor en liten liste over elementene som er mest brukt i vanlige uttrykk med JavaDet er mange flere elementer enn de som er vist i denne opplæringen, så det anbefales å gjøre din egen forskning for å forsterke kunnskapen:
Start av linje\^ Med dette elementet fortsetter vi å indikere for Java som starter en linje i det regulære uttrykket.
Slutt på linjen$ Med dette symbolet indikerer vi at vi har fullført linjen.
Tegnliste[] Med parentes indikerer vi for det vanlige uttrykket at det skal søke etter noen av listene inne.
Utelukke[\^] Det lar oss velge et hvilket som helst tegn som ikke er oppført.
Kvantifisering{j, k} Finn det som er i j antall ganger angitt k; {j,} i dette andre tilfellet, uansett hva som er i j en eller flere ganger; endelig {j} indikerer at det som er i skal vises j kun en gang.
Ordtegn\ w Finn tegnene som tilhører ord, men hvis vi bruker \ W den gjør det motsatte lokaliserer tegn som ikke hører hjemme.
Siffer\ d Det lar oss lage treff med bare sifre og hvis vi bruker \ D vi vil matche alt som ikke er et siffer eller numerisk tegn.
Blanke\ s Det lar oss matche blanke mellomrom som faner, mellomrom, men hvis vi bruker \ S gjør det motsatte, det matcher alt som ikke er hvitt mellomrom.
Som vi kan se med disse få elementene, kan vi bygge forskjellige kombinasjoner som vi kan få relativt komplekse mønstre med.
Hvis vi vil prøve en vanlig setning Før vi kompilerer et program kan vi bruke rubular.com -siden der vi kan evaluere mønstrene i sanntid.

FORSTØRRE

Vi skal utføre et enkelt eksempel der vi skal teste a vanlig uttrykk for å validere en e -post, vil vi bruke følgende:
[_ a-z0-9-] + (\. [_ a-z0-9-] +) * @ [a-z0-9-] + (\. [a-z0-9-] +) * (\. [az] {2,3}) $

Først må vi skrive inn det regulære uttrykket i det første feltet i formen på siden av rubular.com deretter i feltet kalt teststrengen din Det er her vi skal teste forskjellige e -poster for å bekrefte at regex fungerer, la oss se hvordan validatoren oppfører seg når vi skriver inn en ugyldig e -post:

FORSTØRRE

Som vi kan se, mangler eksempelperioden vår, så den er ugyldig og ikke genererer ingen match Med det vanlige uttrykket kommer vi til å korrigere det ved å plassere det manglende punktet, og validatoren genererer automatisk et positivt svar slik at vi kan se at vårt regulære uttrykk fungerer uten problemer.

FORSTØRRE

Som vi kan se, er dette en veldig nyttig ressurs når vi lærer å bruke vanlige uttrykk ikke bare i Java hvis ikke på noe språk.
Når vi vet hva hver av de grunnleggende elementene i syntaksen gjør, må vi nå lære hvordan vi kan lage en søk etter et mønster innenfor Java, med dette kan vi se hvilke metoder, klasser og pakker som spiller inn når vi bruker vanlige uttrykk.
Det første vi bør vite er at alle disse verktøyene er i pakken java.util.regex, så for å gjøre disse eksemplene må vi inkludere denne pakken i begynnelsen av timene våre.
Når ovenstående er gjort, kan vi teste for et mønster på følgende måte:
 if (ourString.matches (ourExpression)) {// Hvis den samsvarer her, kjører vi en kode} 

Vi ser at vi bruker metoden fyrstikker (), dette vil evaluere tegnstrengen opp mot regex -mønsteret og returnere ekte eller falsk, i tilfelle tegnstrengen samsvarer med mønsteret eller ikke.
Denne typen bruk er fin i små valideringer, men hvis vi skal bruke en tilbakevendende validering, det vil si at den vil vises mange ganger i programmet vårt, er det best å lage en liten rutine eller klasse som lar oss evaluere strengen av parametrisk form, det vil si en rutine eller metode som lar oss angi en streng og returnere sant eller usant, allerede sammenlignet med et bestemt mønster.
I det følgende programmet skal vi teste et lite mønster, og vi skal evaluere det mot et par strenger, og programmet vil fortelle oss hvilken det gjør. kamp, det vil si hvilken som matcher og hvilken som ikke gjør det, la oss se koden, og så får vi se hvordan den fungerer:
 import java.util.regex. *; public class TestPatterns {public static void main (String [] argv) {String pattern = "Q [u] \ d + \."; String [] input = {"QA777. Er identifikatoren for produktet vårt.", "Quack, Quack, Quack!" }; Mønster p = Pattern.compile (mønster); for (String in: input) {boolean found = p.matcher (in) .lookingAt (); System.out.println ("'" + mønster + "'" + (funnet? "Treff '": "stemmer ikke" ") + i +"' "); }}} 

Her ser vi hvordan det første vi gjør er å importere pakken som er nevnt i begynnelsen av denne delen, for på denne måten å oppnå funksjonaliteten til søket ved hjelp av regulære uttrykk. Deretter bygger vi et mønster som vi vil bruke er vårt program, i dette tilfellet er det et mønster som matcher bokstaven “Sp"Da må den ha et hvilket som helst tegn unntatt bokstaven"eller”Og må slutte med en periode. Deretter kompilerer vi mønsteret vårt ved hjelp av metoden kompilere og vi kan bruke den til å lage fyrstikker. Til slutt, hvis mønsteret samsvarer, skrives det ut med ordet kamp ellers skriver vi ut det stemmer ikke.
La oss se på bildet nedenfor hvordan dette ser ut når vi kjører programmet:

FORSTØRRE

Vi noterer deretter, som forklart, den første strengen eller kjeden hvis den stemmer overens, men den andre ikke, og for ytterligere referanse legger vi mønsteret som sammenligningen skal gjøres på.
Vi skal nå utføre et mer avansert eksempel, vi skal identifisere hvilken del av strengene våre, dette er veldig nyttig når vi gjør tekstsøk, siden vi med dette kunne markere treffene til det brukeren skriver inn.
For dette skal vi bruke den samme basen i vårt forrige program med noen modifikasjoner, la oss se koden og deretter forklaringen på den:
 import java.util.regex. *; offentlig klasse Match {public static void main (String [] argv) {String pattern = "Q [u] \ d + \."; Mønster r = Pattern.compile (mønster); String text = "IDen er: QW990. Testens slutt!"; Matcher m = r.matcher (tekst); if (m.find ()) {System.out.println (mønster + "matcher \" " + m.gruppe (0) +" \ "inne \" " + tekst +" \ ""); } annet {System.out.println ("Ingen treff"); }}} 

Nok en gang ser vi hvordan vi starter programmet vårt inkludert pakken java.util.regex. *. Deretter bruker vi det samme mønsteret fra det forrige programmet og kompilerer det med metoden kompilere, det interessante kommer nå, vi har brukt metoden matcher () for å finne kampen og deretter med metoden finne () og metoden gruppe () vi kan trekke ut nøyaktig det som matcher, til slutt tar vi de tilsvarende skjermutskriftene. La oss se hvordan programmet vårt ser ut nå:

FORSTØRRE

Dermed ser vi da hvordan vi var i stand til å isolere ordet som virkelig samsvarer med mønsteret vi har arrangert for sammenligning av vanlig setning.
En av de mest brukte programmene er på skjemaer, der vi kan gjøre valideringer av e -post, telefonnumre, kredittkort, passord, IP -adresser, brukernavn, postnummer og til og med bekrefte at alle taggene våre i HTML -dokumentet vårt er korrekt lukket, noe som gir oss muligheten til å oppnå større sikkerhet i behandlingen av tekst som er lagt inn av brukere.
Men ikke bare i valideringer i felt i en form, som vi la merke til i vårt siste eksempel, kan vi også gjøre lange tekstsøk Etter et bestemt mønster, med det, kan vi søke i svært komplekse tekstdokumenter på en systematisk måte og dermed spare mye tid, bare ved å skrive et lite program.
Med dette fullfører vi denne opplæringen, vi har lært hvordan vi kan gå fra å ha forskjellige elementer til å uttrykke situasjoner i våre mønstre til å effektivt gjøre de tilsvarende sammenligningene av teksten eller tegnene vi ønsker å evaluere, alt dette takket være vanlig uttrykk. Disse evalueringene er ganske raske takket være optimaliseringene som språket gjør i metodene det tilbyr oss, så de er veldig egnet for konstruksjon av grensesnitt der vi trenger å søke og validere teksten som brukeren skriver inn.Likte og hjalp du denne opplæringen?Du kan belønne forfatteren ved å trykke på denne knappen for å gi ham et positivt poeng
wave wave wave wave wave