java regex tutorial with regular expression examples
Ovaj vodič za Java Regex objašnjava što je Regularni izraz u Javi, zašto nam je potreban i kako ga koristiti uz pomoć primjera regularnog izraza:
DO regularni izraz na Javi koja je skraćeno ' regex 'Je izraz koji se koristi za definiranje uzorka pretraživanja nizova.
Uzorak pretraživanja može biti jednostavan znak ili podniz ili može biti složeni niz ili izraz koji definira određeni obrazac koji se traži u nizu.
Nadalje, uzorak će se možda morati podudarati jedan ili više puta sa nizom.
=> Posjetite ovdje da biste vidjeli seriju Java treninga za sve.
Što ćete naučiti:
Redovito izražavanje: zašto nam treba
Regularni izraz uglavnom se koristi za traženje uzorka u nizu. Zašto tražimo obrazac u nizu? Možda bismo željeli pronaći određeni obrazac u nizu, a zatim manipulirati njime ili urediti.
Dakle, u računalnoj aplikaciji možemo neprestano zahtijevati manipuliranje raznim uzorcima. Stoga nam uvijek trebaju regularni izrazi kako bi se olakšalo traženje uzorka.
Sada kada je dan obrazac za traženje, kako točno funkcionira regularni izraz?
Kada analiziramo i izmijenimo tekst pomoću regularnog izraza, kažemo da smo 'primijenili regularni izraz na niz ili tekst'. Ono što mi radimo je da primijenimo uzorak na tekst u smjeru ‘slijeva udesno’, a izvorni niz podudara se s uzorkom.
Na primjer, uzeti u obzir niz ' ababababab '. Pretpostavimo da je definiran regularni izraz 'aba'. Dakle, sada moramo primijeniti ovaj regularni izraz na niz. Primjenjujući regularni izraz slijeva udesno, regularni izraz podudarat će se s nizom “ aba_aba___ ”, Na dva mjesta.
Dakle, nakon što se izvorni znak upotrijebi u utakmici, ne možemo ga ponovno upotrijebiti. Stoga, nakon pronalaska prvog podudaranja aba, treći znak 'a' nije ponovno upotrijebljen.
razlika između prosljeđivanja i aktiviranja porta
java.util.regex
Java jezik ne pruža nijednu ugrađenu klasu za regularni izraz. Ali možemo raditi s regularnim izrazima tako da uvozimo ' java.util.regex ”Paket.
Paket java.util.regex nudi jedno sučelje i tri klase kako je prikazano u nastavku:
Klasa uzorka: Klasa uzorka predstavlja sastavljeni regularni izraz. Klasa Pattern nema javnih konstruktora, ali pruža statičke metode compile () koje vraćaju Pattern objekte i mogu se koristiti za stvaranje uzorka.
Klasa podudaranja: Objekt klase Matcher podudara se s regularnim izrazom s nizom. Poput klase Pattern, i ova klasa ne nudi nikakve javne konstruktore. Pruža metodu matcher () koja vraća Matcher objekt.
PatternSyntaxException: Ova klasa definira neprovjerenu iznimku. Objekt tipa PatternSyntaxException vraća neprovjerenu iznimku koja ukazuje na sintaksnu pogrešku u regularnom uzorku.
MatchResult sučelje: Sučelje MatchResult određuje rezultat podudaranja regularnog izraza.
Primjer Java Regex-a
Primijenimo jednostavan primjer regularnog izraza u Javi. U donjem programu imamo jednostavni niz kao uzorak, a zatim ga podudaramo sa nizom. Izlaz ispisuje početni i krajnji položaj u nizu u kojem se nalazi uzorak.
import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main { public static void main(String args()) { //define a pattern to be searched Pattern pattern = Pattern.compile('Help.'); // Search above pattern in 'softwareTestingHelp.com' Matcher m = pattern.matcher('softwareTestingHelp.com'); // print the start and end position of the pattern found while (m.find()) System.out.println('Pattern found from position ' + m.start() + ' to ' + (m.end()-1)); } }
Izlaz:
Uzorak pronađen od 15 do 19
otvaranje .jar datoteka na Windows 10
Regex Matcher u Javi
Klasa podudaranja implementira sučelje MatchResult. Matcher djeluje kao regex mehanizam i koristi se za točno podudaranje niza znakova.
Dolje su date uobičajene metode klase Matcher. Ima više metoda, ali u nastavku smo naveli samo važne metode.
Ne | Metoda | Opis |
---|---|---|
7 | int start () | Daje početni indeks podudarne podsekcije i vraća ga. |
jedan | logička podudaranja () | Provjerava podudara li se regularni izraz s uzorkom. |
dva | Uzorak uzorka () | Vraća obrazac koji podudarnik tumači. |
3 | logičko pronalaženje () | Ova metoda pronalazi sljedeći izraz koji se podudara s uzorkom. |
4 | logičko pronalaženje (int start) | Isto kao i find (), ali pronalazi izraz koji se podudara s danim početnim položajem. |
5 | Nizovna skupina () | Vraća sekvencu koja odgovara uzorku. |
6 | Nizovna grupa (naziv niza) | Vraća ulaznu podrednost. To se snima u ranijoj operaciji podudaranja hvatanjem grupe s navedenim imenom. |
8 | int kraj () | Vraća krajnju poziciju / indeks podudarne podsekvence. |
9 | int groupCount () | Vrati ukupan broj podudarnih podsekvenci. |
10 | String replaceAll (zamjena niza) | Zamijenite sve podsekvence ulaznog niza koje se podudaraju s uzorkom zadanim zamjenskim nizom. |
jedanaest | String replaceFirst (zamjena niza) | Zamijenite prvu podudarajuću sekvencu ulaznog niza navedenim zamjenskim nizom. |
12 | String toString () | Vrati prikaz niza trenutnog podudaranja. |
Primjer provedbe redovnog izraza
Pogledajmo primjer upotrebe nekih od ovih metoda.
import java.util.regex.Matcher; import java.util.regex.Pattern; public class MatcherDemo { public static void main(String() args) { String inputString = 'She sells sea shells on the sea shore with shells'; //obtain a Pattern object Pattern pattern = Pattern.compile('shells'); // obtain a matcher object System.out.println('input string: ' + inputString); Matcher matcher = pattern.matcher(inputString); inputString = matcher.replaceFirst('pearls'); System.out.println('
replaceFirst method:' + inputString); //use replaceAll method to replace all occurrences of pattern inputString = matcher.replaceAll('pearls'); System.out.println('
replaceAll method:' + inputString); } }
Izlaz:
ulazni niz: Školjkama prodaje morske školjke na morskoj obali
replaceFirst metoda: Školjkama prodaje morske bisere na morskoj obali
replaceAll metoda: Prodaje morske bisere na morskoj obali s biserima
Regex klasa uzorka u Javi
Klasa uzoraka definira uzorak za regex engine koji se zatim može koristiti za podudaranje s ulaznim nizom.
Sljedeća tablica prikazuje metode koje pruža klasa Pattern koja se često koristi.
Ne | Metoda | Opis |
---|---|---|
7 | Niz () podijeljen (CharSequence input, int limit) | Ulazni niz podijeljen je oko podudaranja pronađenih prema datom uzorku. |
jedan | statička kompilacija uzorka (String regex) | Vraća kompilirani prikaz regularnog izraza. |
dva | statička kompilacija uzorka (String regex, int zastave) | Kompilira dani regularni izraz koristeći određene zastavice i obrazac povratka. |
3 | Podudara se s podudaranjima (unos CharSequence) | Vraća podudaranje podudaranjem ulaznog niza s uzorkom. |
4 | statička logička podudaranja (regularni izraz niza, unos CharSequence) | Kompilira zadani regularni izraz i podudara obrazac s danim ulazom. |
5 | int zastave () | Vraća zastavice uzorka s kojim se vrši podudaranje. |
6 | Niz () podijeljen (unos CharSequence) | Ulazni niz podijeljen je oko podudaranja pronađenih prema datom uzorku. |
8 | Uzorak niza () | Vraća obrazac regularnog izraza. |
9 | statični citat niza (niz) | Vraća doslovni niz (uzorak) za zadani niz. |
10 | String toString () | Dobiti niz prikaza uzorka. |
Sljedeći primjer koristi neke od gore navedenih metoda klase Pattern.
import java.util.regex.*; public class Main { public static void main(String() args) { // define a REGEX String String REGEX = 'Test'; // string to be searched for given pattern String actualString = 'Welcome to SoftwareTestingHelp portal'; // generate a pattern for given regex using compile method Pattern pattern = Pattern.compile(REGEX); // set limit to 2 int limit = 2; // use split method to split the string String() array = pattern.split(actualString, limit); // print the generated array for (int i = 0; i Izlaz:
array (0) = Dobrodošli u softver
niz (1) = portal ingHelp
U gore navedenom programu koristimo metodu kompajliranja za generiranje uzorka. Zatim podijelimo ulazni niz oko ovog uzorka i čitamo ga u niz. Na kraju prikazujemo niz koji je generiran kao rezultat razdvajanja ulaznog niza.
Regex metoda podudaranja nizova
Vidjeli smo metodu String.Contains () u našim vodičima za niz. Ova metoda vraća logičku vrijednost true ili false, ovisno o tome sadrži li niz navedeni znak ili ne.
Slično tome, imamo metodu 'matches ()' za provjeru podudara li se niz s regularnim izrazom ili regularnim izrazom. Ako se niz podudara s navedenim regularnim izrazom, vraća se istinska vrijednost ili se vraća false.
Opća sintaksa metode match ():
public boolean matches (String regex)
Ako navedeni regularni izraz nije važeći, tada se baca 'PatternSyntaxException'.
Primijenimo program za demonstraciju upotrebe metode match ().
public class MatchesExample{ public static void main(String args()){ String str = new String('Java Series Tutorials'); System.out.println('Input String: ' + str); //use matches () method to check if particular regex matches to the given input System.out.print('Regex: (.*)Java(.*) matches string? ' ); System.out.println(str.matches('(.*)Java(.*)')); System.out.print('Regex: (.*)Series(.*) matches string? ' ); System.out.println(str.matches('(.*)Series(.*)')); System.out.print('Regex: (.*)Series(.*) matches string? ' ); System.out.println(str.matches('(.*)String(.*)')); System.out.print('Regex: (.*)Tutorials matches string? ' ); System.out.println(str.matches('(.*)Tutorials')); } }
Izlaz:
Ulazni niz: Vodiči za Java seriju
Redovni izraz: (. *) Java (. *) Odgovara nizu? pravi
Redovni izraz: (. *) Niz (. *) Odgovara nizu? pravi
Redovni izraz: (. *) Niz (. *) Odgovara nizu? lažno
Regex: (. *) Tutoriali se podudaraju sa nizom? pravi
Koristimo puno posebnih znakova i Metaznakova s regularnim izrazima u Javi. Također koristimo mnoge klase znakova za podudaranje uzoraka. U ovom ćemo odjeljku pružiti tablice koje sadrže klase znakova, meta znakove i kvantifikatore koji se mogu koristiti s regularnim izrazom.
Regex klase znakova
Ne Klasa likova Opis 7 (a-z && (^ m-p)) Oduzimanje: a do z, a ne m do p: (a-lq-z) jedan (pqr) p, q ili r dva (^ pqr) Negacija: Bilo koji znak osim p, q ili r 3 (a-zA-Z) Raspon: od a do z ili od A do Z, uključujući 4 (a-d (m-p)) Unija: od a do d ili od m do p: (a-dm-p) 5 (a-z && (def)) Sjecište: d, e ili f 6 (a-z && (^ bc)) Oduzimanje: od a do z, osim za b i c: (ad-z)
Regex kvantifikatori
Kvantifikatori se koriste za određivanje broja pojavljivanja znaka u regularnom izrazu.
Sljedeća tablica prikazuje uobičajene regex kvantifikatore koji se koriste u Javi.
Ne Regex kvantifikator Opis 7 U Bilo koji znak koji nije riječ, (^ w) jedan x? x se pojavljuje jednom ili se uopće ne pojavljuje dva x + x se pojavljuje jedan ili više puta 3 x * x se javlja nula ili više puta 4 x {n} x se javlja n puta 5 x {n,} x se javlja n ili više puta 6 X i Z} x se javlja najmanje y puta, ali manje od z puta
Regex meta znakovi
Metaznakovi u regexu djeluju kao stenografski kodovi. Ovi kodovi uključuju razmake i ne-razmake zajedno s ostalim kratkim kodovima.
Sljedeća tablica navodi meta znakove regularnog izraza.
Ne Meta likovi Opis jedan . Bilo koji znak (može ili ne mora odgovarati terminatoru) dva d Bilo koje znamenke, (0-9) 3 D Bilo koja znamenka, (^ 0-9) 4 s Bilo koji razmak, ( t n x0B f r) 5 S Bilo koji znak koji nije razmak, (^ s) 6 u Bilo koji znak riječi, (a-zA-Z_0-9) 8 b Granica riječi 9 B Granica koja nije riječ
Slijedi Java program koji koristi gore navedene posebne znakove u regularnom izrazu.
import java.util.regex.*; public class RegexExample{ public static void main(String args()){ // returns true if string exactly matches 'Jim' System.out.print('Jim (jim):' + Pattern.matches('Jim', 'jim')); // Returns true if the input string is Peter or peter System.out.println('
(Pp)eter(Peter) :' + Pattern.matches('(Pp)eter', 'Peter')); //true if string = abc System.out.println('
.*abc.*(pqabcqp) :' + Pattern.matches('.*abc.*', 'pqabcqp')); // true if string doesn't start with a digit System.out.println('
^(^\d).*(abc123):' + Pattern.matches('^(^\d).*', 'abc123')); // returns true if the string contains exact three letters System.out.println('
(a-zA-Z)(a-zA-Z)(a-zA-Z) (aQz):' + Pattern.matches('(a-zA-Z)(a-zA-Z)(a-zA-Z)', 'aQz')); System.out.println('
(a-zA-Z)(a-zA-Z)(a-zA-Z), a10z' + Pattern.matches('(a-zA-Z)(a-zA-Z)(a-zA-Z), a10z', 'a10z')); //input string length = 4 // true if the string contains 0 or more non-digits System.out.println('
\D*, abcde:' + Pattern.matches('\D*', 'abcde')); //True // true of line contains only word this ^-start of the line, $ - end of the line System.out.println('
^This$, This is Java:' + Pattern.matches('^This$', 'This is Java')); System.out.println('
^This$, This:' + Pattern.matches('^This$, This', 'This')); System.out.println('
^This$, Is This Java?:' + Pattern.matches('^This$, Is This Java?', 'Is This Java?')); } }
Izlaz:
Jim (jim): netačno
(Pp) eter (Petar): istina
. * abc. * (pqabcqp): točno
^ (^ d). * (abc123): točno
(a-zA-Z) (a-zA-Z) (a-zA-Z) (aQz): točno
(a-zA-Z) (a-zA-Z) (a-zA-Z), a10zfalse
D *, abcde: točno
^ Ovaj $, ovo je Java: false
^ Ovo $, Ovo: netačno
^ Ovaj $, je li ovo Java?: False
U gornjem programu pružili smo razne regularne izraze koji se podudaraju s ulaznim nizom. Čitateljima se savjetuje da pročitaju komentare u programu za svaki regularni izraz kako bi bolje razumjeli koncept.
Regex logički ili (|) operator
Možemo koristiti logički ili (| operator) u regularnom izrazu koji nam daje mogućnost odabira bilo kojeg operanda od | operater. Ovim se operatorom možemo koristiti u regularnom izrazu kako bismo dali izbor znaka ili niza. Na primjer, ako želimo podudarati obje riječi, 'test' i 'Test', tada ćemo te riječi uključiti u logički ili operator kao Test | test.
Pogledajmo sljedeći primjer da bismo razumjeli ovaj operator.
import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegexOR { public static void main(String() args) { // Regex string to search for patterns Test or test String regex = '(Test|test)'; // Compiles the pattern and obtains the matcher object from input string. Pattern pattern = Pattern.compile(regex); String input = 'Software Testing Help'; Matcher matcher = pattern.matcher(input); // print every match while (matcher.find()) { System.out.format('Text '%s' found at %d to %d.%n', matcher.group(), matcher.start(), matcher.end()); } //define another input string and obtain the matcher object input = 'SoftwaretestingHelp'; matcher = pattern.matcher(input); // Print every match while (matcher.find()) { System.out.format('Text '%s' found at %d to %d.%n', matcher.group(), matcher.start(), matcher.end()); } } }
Izlaz:
Tekst 'Test' pronađen u 9 do 13.
Tekst 'test' pronađen u 8 do 12.
U ovom smo programu osigurali regularni izraz '(Test | test)'. Zatim prvo dajemo ulazni niz kao 'Pomoć za testiranje softvera' i podudaramo se s uzorkom. Vidimo da je šibica pronađena i pozicija ispisana.
Dalje, ulazni niz dajemo kao 'SoftwaretestingHelp'. Ovaj put je i meč pronađen. To je zato što je regularni izraz upotrijebio ili operator, a time i uzorak s obje strane | operator se podudara sa nizom.
Provjera e-pošte pomoću regularnog izraza
Id (adresu) e-pošte možemo provjeriti i pomoću regularnog izraza pomoću metode java.util.regex.Pattern.matches (). Podudara se s danim id-om e-pošte s regularnim izrazom i vraća true ako je e-pošta valjana.
Sljedeći program prikazuje provjeru valjanosti e-pošte pomoću regularnog izraza.
public class EmailDemo { static boolean isValidemail(String email) { String regex = '^(\w-_\.+)*(\w-_\.)\@((\w)+\.)+(\w)+(\w)$'; //regex to validate email. return email.matches(regex); //match email id with regex and return the value } public static void main(String() args) { String email = 'ssthva@gmail.com'; System.out.println('The Email ID is: ' + email); System.out.println('Email ID valid? ' + isValidemail(email)); email = '@sth@gmail.com'; System.out.println('The Email ID is: ' + email); System.out.println('Email ID valid? ' + isValidemail(email)); } }
Izlaz:
ID e-pošte je: ssthva@gmail.com
ID e-pošte valjan? pravi
ID e-pošte je: @ sth @ gmail.com
ID e-pošte valjan? lažno
Kao što vidimo iz gornjeg rezultata, valjan je prvi id e-pošte. Drugi id izravno započinje s @ i stoga ga regularni izraz ne provjerava. Stoga je nevažeći ID.
sql pitanja i odgovori za iskusni pdf
Često postavljana pitanja
P # 1) Što je u regularnom izrazu?
Odgovor: DO Redovito izražavanje obično zvani regularni izraz je obrazac ili niz znakova (normalnih ili posebnih ili Meta znakova) koji se koristi za provjeru ulaznog niza.
P # 2) Koji je značaj klase Matcher za regularni izraz u Javi?
Odgovor: Klasa podudaranja (java.util.regex.Matcher) djeluje kao regex motor. Izvodi operacije podudaranja tumačenjem uzorka.
P # 3) Koji je obrazac u Javi?
Odgovor: Paket java.util.regex pruža klasu Pattern koja se koristi za sastavljanje regularnog izraza u obrazac koji je standardni prikaz regularnog izraza. Zatim se ovaj obrazac koristi za provjeru valjanosti nizova tako što se podudara s uzorkom.
P # 4) Što je B u regularnom izrazu?
Odgovor: B u regularnom izrazu označava se kao b i sidrišni je znak koji se koristi za usklađivanje položaja koji se naziva granica riječi. Početak retka označen je znakom (^), a kraj retka označen je znakom dolara ($).
P # 5) Je li Java uzorkovana nitima?
Odgovor: Da. Primjerci klase Pattern su nepromjenjivi i sigurni za upotrebu u više istodobnih niti. Ali primjerci klase matcher nisu sigurni u niti.
Zaključak
U ovom uputstvu raspravljali smo o regularnim izrazima na Javi. Regularni izraz koji je poznat i kao 'regularni izraz' koristi se za provjeru valjanosti ulaznog niza u Javi. Java pruža ' java.util.regex ' paket koji nudi klase poput Pattern, Matcher itd. koje pomažu u definiranju i podudaranju uzorka s ulaznim nizom.
Također smo vidjeli razne posebne klase znakova i Metaznakove koje možemo koristiti u regularnom izrazu koji daju kratice za podudaranje uzoraka. Također smo istražili provjeru valjanosti e-pošte pomoću regexa.
=> Ovdje istražite jednostavnu seriju Java treninga.
Preporučena literatura