Werken met reguliere expressies in Java

Inhoudsopgave
In de huidige informatiesystemen is het normaal om zoekfuncties te zien, deze functies moeten elke keer worden verwerkt patronen van veel meer complexen. Om elk geval in het bijzonder te kunnen bekijken, zou het enkele duizenden jaren duren. Daarom zijn er mechanismen ontwikkeld die het mogelijk maken om een ​​geformuleerde representatie van zoekopdrachten te maken.
Deze formules zijn te vinden in de normale uitdrukkingen, waarmee we patronen kunnen vaststellen voor het evalueren van tekstreeksen en een positieve of negatieve waarde kunnen retourneren als de tekenreeks al dan niet overeenkomt met de uitgedrukte formule.
In Java We kunnen reguliere expressies op een eenvoudige manier implementeren, maar dit vereist een vrij uitgebreide studie door de ontwikkelaar, zodat hij de verschillende elementen ervan kan leren.
De manier waarop we de formules kunnen uitdrukken waarmee we onze patronen kunnen testen met een bepaalde codeconstructie, gaan we de syntaxis van reguliere expressies.
Wat staat de syntaxis ons toe?Wat de syntaxis ons in staat stelt, is om patronen vast te stellen op type teken, hoeveelheid, combinatie van teken en hoeveelheden, begin met een bepaald element, stel een uitdrukking in voor het midden van de formule en een einde. Hiermee kunnen we zeer specifieke patronen identificeren die nodig kunnen zijn in ons programma of misschien een zoekopdracht op een tekst of een database op een meer adequate manier filteren.
Laten we hieronder een kleine lijst bekijken van de elementen die het meest worden gebruikt in reguliere expressies met Java, er zijn veel meer elementen dan die in deze tutorial worden getoond, dus het wordt aanbevolen om je eigen onderzoek te doen om de kennis te versterken:
Begin van lijn\^ Met dit element gaan we verder met het aangeven van: Java waarmee een regel in de reguliere expressie begint.
Einde van de lijn$ Met dit symbool geven we aan dat we klaar zijn met de regel.
Karakterlijst[] Met haakjes geven we aan de reguliere expressie aan dat deze moet zoeken naar een van de lijsten binnenin.
Uitsluiten[\^] Hiermee kunnen we elk teken selecteren dat niet in de lijst staat.
Kwantificator{j, k} Zoek wat er in zit J het aantal aangegeven keren k; {J,} in dit tweede geval, wat er ook in zit J één of meerdere keren; eindelijk {J} geeft aan dat wat in is moet verschijnen J een keer maar.
Woordtekens\ met Zoek de karakters die behoren tot woord, maar als we \ W het doet het tegenovergestelde en lokaliseert karakters die er niet thuishoren.
cijfers\ NS Het stelt ons in staat om overeenkomsten te maken met alleen cijfers en als we gebruiken \ NS we zullen alles matchen dat geen cijfer of numeriek teken is.
blanco's\ s Het stelt ons in staat om lege ruimtes zoals tabs, spatiebalk te matchen, maar als we gebruiken \ S doet het tegenovergestelde, het komt overeen met alles wat geen witruimte is.
Zoals we kunnen zien met deze paar elementen kunnen we verschillende combinaties bouwen waarmee we relatief complexe patronen kunnen verkrijgen.
Als we er een willen proberen gewone zin Voordat we een programma samenstellen, kunnen we de rubular.com-pagina gebruiken waar we de patronen in realtime kunnen evalueren.

VERGROTEN

We gaan een eenvoudig voorbeeld uitvoeren waarbij we een gaan testen reguliere expressie om een ​​e-mail te valideren, zullen we het volgende gebruiken:
[_ a-z0-9 -] + (\. [_ a-z0-9 -] +) * @ [a-z0-9 -] + (\. [a-z0-9 -] +) * (\ . [az] {2,3}) $

Eerst moeten we de reguliere expressie invoeren in het eerste veld van de vorm van de pagina van rubular.com dan in het veld genaamd je testreeks is waar we verschillende e-mails gaan testen om te controleren of de regex werkt, laten we eens kijken hoe de validator zich gedraagt ​​wanneer we een ongeldige e-mail invoeren:

VERGROTEN

Zoals we kunnen zien, mist onze voorbeeld-e-mail de punt, dus deze is ongeldig en niet genereert geen match Met de reguliere expressie gaan we deze corrigeren door het ontbrekende punt te plaatsen en de validator genereert automatisch een positief antwoord waardoor we kunnen zien dat onze reguliere expressie probleemloos werkt.

VERGROTEN

Zoals we kunnen zien, is dit een zeer nuttige hulpbron wanneer we reguliere expressies leren gebruiken, niet alleen in Java indien niet in welke taal dan ook.
Als we eenmaal weten wat elk van de basiselementen van de syntaxis doet, moeten we nu leren hoe we een zoek naar een patroon binnenin Java, hiermee kunnen we zien welke methoden, klassen en pakketten een rol spelen als we reguliere expressies gebruiken.
Het eerste dat we moeten weten, is dat al deze hulpprogramma's in het pakket zitten java.util.regex, dus om deze voorbeelden te doen, moeten we dit pakket aan het begin van onze lessen opnemen.
Zodra het bovenstaande is gedaan, kunnen we op de volgende manier testen op een patroon:
 if (ourString.matches (ourExpression)) {// Als het hier overeenkomt, voeren we een code uit} 

We zien dat we de methode wedstrijden (), dit zal de tekenreeks evalueren tegen het regex-patroon en terugkeren waar of vals, voor het geval de tekenreeks overeenkomt met het patroon of niet.
Dit type gebruik is prima in kleine validaties, maar als we een terugkerende validatie gaan gebruiken, dat wil zeggen dat deze vele malen in ons programma zal verschijnen, is het het beste om een ​​kleine routine of klasse te maken waarmee we de string kunnen evalueren van parametrische vorm, dat wil zeggen een routine of methode waarmee we een tekenreeks kunnen invoeren en waar of onwaar kunnen retourneren, al vergeleken met een bepaald patroon.
In het volgende programma gaan we een klein patroon testen en we gaan het evalueren aan de hand van een paar strings en het programma zal ons vertellen welke het doet. overeenkomst, dat wil zeggen, welke overeenkomt en welke niet, laten we de code eens bekijken en dan zullen we zien hoe het werkt:
 import java.util.regex.*; public class TestPatterns {public static void main (String [] argv) {String pattern = "Q [u] \ d + \."; String [] input = {"QA777. Is de identifier van ons product.", "Quack, Quack, Quack!" }; Patroon p = Patroon.compile (patroon); for (String in: input) {boolean gevonden = p.matcher (in) .lookingAt (); System.out.println ("'" + patroon + "'" + (gevonden? "Komt overeen'": "komt niet overeen met '") + in + "'"); }}} 

Hier zien we hoe we als eerste het pakket importeren dat aan het begin van deze sectie wordt genoemd, om op deze manier de functionaliteiten van het zoeken op reguliere expressies te verkrijgen. Vervolgens bouwen we een patroon dat we zullen gebruiken in ons programma, in dit geval is het een patroon dat overeenkomt met de letter "Q"Dan moet het een willekeurig teken hebben behalve de letter"of“En moet eindigen met een punt. Vervolgens compileren we ons patroon met behulp van de methode compileren en we kunnen het gebruiken om de overeenkomsten te maken. Ten slotte, als het patroon overeenkomt, wordt het bedrukt met het woord overeenkomst anders printen we het komt niet overeen.
Laten we in de volgende afbeelding zien hoe dit eruitziet wanneer we het programma uitvoeren:

VERGROTEN

We noteren dan, zoals uitgelegd, de eerste string of ketting als deze overeenkomt, maar de tweede niet, en voor verdere referentie plaatsen we het patroon waarop de vergelijking moet worden gemaakt.
We gaan nu een meer geavanceerd voorbeeld uitvoeren, we gaan identificeren welk deel van onze tekenreeks overeenkomt, dit is erg handig wanneer we tekstzoekopdrachten uitvoeren, omdat we hiermee de overeenkomsten kunnen markeren van wat de gebruiker invoert.
Hiervoor gaan we dezelfde basis van ons vorige programma gebruiken met enkele aanpassingen, laten we de code bekijken en dan de uitleg ervan:
 import java.util.regex.*; public class Match {public static void main (String [] argv) {String pattern = "Q [u] \ d + \."; Patroon r = Patroon.compile (patroon); String text = "De id is: QW990. Einde van de test!"; Matcher m = r.matcher (tekst); if (m.find ()) {Systeem.uit.println (patroon + "komt overeen met \" "+ m.groep (0) +" \ "binnenkant \" "+ tekst +" \ ""); } else {System.out.println ("Geen overeenkomsten"); }}} 

Wederom zien we hoe we ons programma inclusief het pakket starten java.util.regex.*. Vervolgens gebruiken we hetzelfde patroon van het vorige programma en compileren het met de methode compileren, het interessante komt nu, we hebben de methode gebruikt matcher () om de overeenkomst te lokaliseren en vervolgens met de methode vinden () en de methode groep () we kunnen precies uitpakken wat overeenkomt, tot slot maken we de bijbehorende zeefdrukken. Laten we eens kijken hoe ons programma er nu uitziet:

VERGROTEN

Zo zien we dan hoe we het woord konden isoleren dat echt overeenkomt met het patroon dat we hebben geregeld voor de vergelijking van de gewone zin.
Een van de meest gebruikte applicaties is op de formulieren, waar we validaties van kunnen doen e-mails, telefoonnummers, creditcards, wachtwoorden, IP-adressen, gebruikersnamen, postcodes en zelfs valideren dat al onze tags in ons HTML-document correct zijn gesloten, dit geeft ons de mogelijkheid om een ​​grotere veiligheid te bereiken in onze verwerking van tekst die door gebruikers is ingevoerd.
Maar niet alleen in validaties in velden van een formulier, zoals we in ons laatste voorbeeld hebben opgemerkt, kunnen we ook doen lange tekst zoekopdrachten Door een bepaald patroon kunnen we hiermee op een systematische manier in zeer complexe tekstdocumenten zoeken en zo veel tijd besparen, simpelweg door een klein programma te schrijven.
Hiermee ronden we deze tutorial af, we hebben geleerd hoe we van het hebben van verschillende elementen om situaties binnen onze patronen uit te drukken kunnen gaan naar het effectief maken van de corresponderende vergelijkingen van de tekst of karakters die we willen evalueren, dit alles dankzij de normale uitdrukkingen. Deze evaluaties zijn vrij snel dankzij de optimalisaties die de taal maakt in de methoden die het ons biedt, dus ze zijn zeer geschikt voor de constructie van interfaces waar we de tekst die de gebruiker invoert moeten zoeken en valideren.Vond je deze Tutorial leuk en heb je eraan geholpen?Je kunt de auteur belonen door op deze knop te drukken om hem een ​​positief punt te geven
wave wave wave wave wave