Indholdsfortegnelse
I dagens informationssystemer er det normalt at se søgefunktioner, disse funktioner skal behandles hver gang mønstre af mange flere komplekser. For at kunne overveje hvert enkelt tilfælde ville det tage et par tusinde år, og derfor er der udviklet mekanismer, der gør det muligt at etablere en formuleret repræsentation af søgninger.Disse formler findes i regulære udtryk, som giver os mulighed for at etablere mønstre til evaluering af tekststrenge og returnere en positiv eller negativ værdi, hvis strengen svarer til den udtrykte formel eller ej.
I Java Vi kan implementere regulære udtryk på en enkel måde, men dette kræver en temmelig omfattende undersøgelse af udvikleren, så han kan lære de forskellige elementer, den har.
Den måde, hvorpå vi kan udtrykke de formler, hvormed vi kan teste vores mønstre med en bestemt kodekonstruktion, vil vi kalde dette for regulært udtryks syntaks.
Hvad tillader syntaksen os?Hvad syntaksen tillader os er at etablere mønstre efter type tegn, mængde, kombination af tegn og mængder, start med et bestemt element, sæt et udtryk for midten af formlen og en afslutning. Med dette kan vi identificere meget specifikke mønstre, der kan være nødvendige i vores program eller måske filtrere på en mere passende måde en søgning på en tekst eller en database.
Lad os se nedenfor en lille liste over de elementer, der er mest brugt i regulære udtryk med Java, der er mange flere elementer end dem, der er vist i denne vejledning, så det anbefales at lave din egen forskning for at forstærke viden:
Start af linje\^ Med dette element fortsætter vi med at angive til Java som starter en linje i det regulære udtryk.
Slut på linje$ Med dette symbol angiver vi, at vi er færdige med linjen.
Tegnliste[] Med parentes angiver vi det regulære udtryk, at det skal søge efter en af listerne inde.
Udelukke[\^] Det giver os mulighed for at vælge ethvert tegn, der ikke er angivet.
Kvantificering{j, k} Find hvad der er i j det angivne antal gange k; {j,} i dette andet tilfælde, uanset hvad der er i j en eller flere gange endelig {j} angiver, at det, der er i, skal vises j kun én gang.
Ordtegn\ w Find de tegn, der tilhører ord, men hvis vi bruger \ W det gør det modsatte lokaliserer tegn, der ikke hører til.
Cifre\ d Det giver os mulighed for at lave kampe med kun cifre, og hvis vi bruger \ D vi matcher alt, der ikke er et ciffer eller et numerisk tegn.
Emner\ s Det giver os mulighed for at matche tomme mellemrum som faner, mellemrum, men hvis vi bruger \ S gør det modsatte, det matcher alt, hvad der ikke er hvidt rum.
Som vi kan se med disse få elementer, kan vi bygge forskellige kombinationer, som vi kan få til at opnå relativt komplekse mønstre.
Hvis vi vil prøve en almindelig sætning Inden vi udarbejder et program, kan vi bruge rubular.com -siden, hvor vi kan evaluere mønstrene i realtid.
FORSTØRRE
Vi skal udføre et enkelt eksempel, hvor vi skal teste a regulært udtryk for at validere en e -mail, vil vi bruge følgende:[_ a-z0-9-] + (\. [_ a-z0-9-] +) * @ [a-z0-9-] + (\. [a-z0-9-] +) * (\. [az] {2,3}) $
Først skal vi indtaste det regulære udtryk i det første felt i formen på siden af rubular.com derefter i feltet kaldet din teststreng er det her, vi skal teste forskellige e -mails for at kontrollere, at regex fungerer, lad os se, hvordan validatoren opfører sig, når vi indtaster en ugyldig e -mail:
FORSTØRRE
Som vi kan se, mangler vores eksempelemail perioden, så den er ugyldig og ikke genererer ingen match Med det regulære udtryk vil vi rette det ved at placere det manglende punkt, og validatoren genererer automatisk et positivt svar, så vi kan se, at vores regulære udtryk fungerer uden problemer.FORSTØRRE
Som vi kan se, er dette en meget nyttig ressource, når vi lærer at bruge regulære udtryk, ikke kun i Java hvis ikke på noget sprog.Når vi ved, hvad hver af de grundlæggende elementer i syntaksen gør, skal vi nu lære, hvordan vi kan lave en søge efter et mønster inden for Java, med dette kan vi se, hvilke metoder, klasser og pakker der spiller ind, når vi bruger regulære udtryk.
Den første ting, vi bør vide, er, at alle disse værktøjer er i pakken java.util.regex, så for at gøre disse eksempler skal vi inkludere denne pakke i begyndelsen af vores klasser.
Når ovenstående er gjort, kan vi teste for et mønster på følgende måde:
if (ourString.matches (ourExpression)) {// Hvis den matcher her, udfører vi en kode}
Vi ser, at vi bruger metoden Tændstikker (), dette vil evaluere tegnstrengen i forhold til regex -mønsteret og returnere rigtigt eller falsk, hvis tegnstrengen matcher mønsteret eller ej.
Denne type brug er fin i små valideringer, men hvis vi skal bruge en tilbagevendende validering, det vil sige, at den vil vises mange gange i vores program, er det bedst at lave en lille rutine eller klasse, der giver os mulighed for at evaluere strengen af parametrisk form, det vil sige en rutine eller metode, der giver os mulighed for at indtaste en streng og returnere sand eller falsk, allerede sammenlignet med et bestemt mønster.
I det følgende program skal vi teste et lille mønster, og vi vil evaluere det mod et par strenge, og programmet vil fortælle os, hvilken det gør. match, det vil sige, hvilken en matcher, og hvilken en ikke, lad os se koden, og så ser vi, 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 vores produkt.", "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 + "'" + (fundet? "Matches '": "matcher ikke'") + i + "'"); }}}
Her ser vi, hvordan det første, vi gør, er at importere pakken, der er nævnt i begyndelsen af dette afsnit, for på denne måde at opnå funktionerne i søgningen ved hjælp af regulære udtryk. Derefter bygger vi et mønster, som vi vil bruge, er vores program, i dette tilfælde er det et mønster, der matcher bogstavet “Q"Så skal den have et hvilket som helst tegn undtagen bogstavet"eller”Og skal slutte med en periode. Derefter kompilerer vi vores mønster ved hjælp af metoden udarbejde og vi kan bruge det til at lave tændstikkerne. Endelig, hvis mønsteret matcher, udskrives det med ordet match ellers udskriver vi det matcher ikke.
Lad os se i følgende billede, hvordan dette ser ud, når vi kører programmet:
FORSTØRRE
Vi noterer derefter, som forklaret, den første streng eller kæde, hvis den matcher, men den anden ikke, og for yderligere reference placerer vi det mønster, som sammenligningen skal foretages på.Vi skal nu udføre et mere avanceret eksempel, vi skal identificere hvilken del af vores streng, der matcher, dette er meget nyttigt, når vi laver tekstsøgninger, da vi med dette kunne fremhæve matches for, hvad brugeren indtaster.
Til dette vil vi bruge den samme base af vores tidligere program med nogle ændringer, lad os se koden og derefter forklaringen på den:
import java.util.regex. *; public class Match {public static void main (String [] argv) {String pattern = "Q [u] \ d + \."; Mønster r = Pattern.compile (mønster); String text = "Id'et er: QW990. Testens afslutning!"; Matcher m = r.matcher (tekst); hvis (m.find ()) {System.out.println (mønster + "matcher \" " + m.gruppe (0) +" \ "inde \" " + tekst +" \ ""); } ellers {System.out.println ("Ingen kampe"); }}}
Endnu en gang ser vi, hvordan vi starter vores program inklusive pakken java.util.regex. *. Derefter bruger vi det samme mønster fra det forrige program og kompilerer det med metoden udarbejde, det interessante kommer nu, vi har brugt metoden matcher () at finde matchen og derefter med metoden Find () og metoden gruppe () vi kan udtrække præcis det der matcher, endelig laver vi de tilsvarende skærmbilleder. Lad os se, hvordan vores program ser ud nu:
FORSTØRRE
Således ser vi så, hvordan vi var i stand til at isolere det ord, der virkelig matcher det mønster, vi har arrangeret til sammenligning af almindelig sætning.En af de mest anvendte applikationer er på former, hvor vi kan foretage valideringer af e -mails, telefonnumre, kreditkort, adgangskoder, IP -adresser, brugernavne, postnumre og endda validere, at alle vores tags i vores HTML -dokument er korrekt lukket, hvilket giver os mulighed for at opnå større sikkerhed i vores behandling af tekst, der er indtastet af brugere.
Men ikke kun i valideringer i felter af en form, som vi bemærkede i vores sidste eksempel, vi også kan gøre lange tekstsøgninger Ved et bestemt mønster, med det, kan vi søge i meget komplekse tekstdokumenter på en systematisk måde og dermed spare meget tid, blot ved at skrive et lille program.
Med dette afslutter vi denne vejledning, vi har lært, hvordan vi kan gå fra at have forskellige elementer til at udtrykke situationer i vores mønstre til effektivt at foretage de tilsvarende sammenligninger af teksten eller tegnene, som vi vil evaluere, alt dette takket være regulære udtryk. Disse evalueringer er ret hurtige takket være de optimeringer, som sproget foretager i de metoder, det tilbyder os, så de er meget velegnede til konstruktion af grænseflader, hvor vi skal søge og validere den tekst, som brugeren indtaster.Kan du lide og hjælpe denne vejledning?Du kan belønne forfatteren ved at trykke på denne knap for at give ham et positivt punkt