java regex tutorial with regular expression examples
Ta vadnica Java Regex pojasnjuje, kaj je regularni izraz v Javi, zakaj ga potrebujemo in kako ga uporabiti s pomočjo primerov regularnega izraza:
TO vsakdanje izražanje v Javi, ki je okrajšana kot ' regularni izraz 'Je izraz, ki se uporablja za določanje vzorca iskanja nizov.
Vzorec iskanja je lahko preprost znak ali podniz ali je lahko kompleksen niz ali izraz, ki definira določen vzorec, ki ga je treba iskati v nizu.
Nadalje se bo moral vzorec enkrat ali večkrat ujemati z nizom.
=> Obiščite tukaj, da si ogledate serijo Java Training For All.
Kaj se boste naučili:
Redno izražanje: Zakaj ga potrebujemo
Regularni izraz se v glavnem uporablja za iskanje vzorca v nizu. Zakaj iščemo vzorec v nizu? Morda bomo želeli najti določen vzorec v nizu in ga nato manipulirati ali urediti.
Torej imamo v računalniški aplikaciji stalno potrebo po manipuliranju z različnimi vzorci. Zato vedno potrebujemo regularni izraz, da olajšamo iskanje vzorca.
Zdaj, ko dobimo vzorec za iskanje, kako natančno deluje regularni izraz?
Ko analiziramo in spremenimo besedilo z uporabo regularnega izraza, rečemo, da smo „uporabili regularni izraz za niz ali besedilo“. Kar uporabimo, uporabimo vzorec za besedilo v smeri od leve proti desni in izvorni niz se ujema z vzorcem.
Na primer upoštevajte niz » ababababab '. Predpostavimo, da je opredeljen regularni izraz 'aba'. Torej, zdaj moramo ta regularni izraz uporabiti za niz. Z uporabo regularnega izraza od leve proti desni se bo izraz ujemal z nizom » aba_aba___ ”, Na dveh mestih.
Ko je torej v ujemanju uporabljen izvorni znak, ga ne moremo ponovno uporabiti. Tako po iskanju prve ujemanja aba tretji znak „a“ ni bil ponovno uporabljen.
kaj je datoteka swf, kako jo odpreti
java.util.regex
Jezik Java ne vsebuje nobenega vgrajenega razreda za regularni izraz. Toda z regularnimi izrazi lahko delamo tako, da uvozimo java.util.regex ”Paket.
Paket java.util.regex ponuja en vmesnik in tri razrede, kot je prikazano spodaj:

Razred vzorca: Razred vzorca predstavlja sestavljeni regularni izraz. Razred Pattern nima nobenih javnih konstruktorjev, ponuja pa statične metode compile (), ki vrnejo predmete Pattern in jih je mogoče uporabiti za ustvarjanje vzorca.
Razred tekme: Predmet razreda Matcher ujema z regularnim izrazom z nizom. Tako kot razred Pattern tudi ta razred ne ponuja nobenih javnih konstruktorjev. Zagotavlja metodo matcher (), ki vrne objekt Matcher.
PatternSyntaxException: Ta razred definira nepreverjeno izjemo. Predmet tipa PatternSyntaxException vrne nepreverjeno izjemo, ki kaže na sintaksno napako v vzorcu regularnih izrazov.
MatchResult vmesnik: MatchResult vmesnik določa rezultat ujemanja regularnega izraza.
Primer Java Regex
Uvedimo preprost primer regularnega izraza v Javi. V spodnjem programu imamo za vzorec preprost niz, ki ga nato povežemo z nizom. Izhod natisne začetni in končni položaj v nizu, kjer je vzorec.
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)); } } Izhod:
Vzorec najden od 15 do 19
Regex Matcher v Javi
Razred Matcher izvaja vmesnik MatchResult. Matcher deluje kot motor regularnih izrazov in se uporablja za natančno ujemanje zaporedja znakov.
Spodaj so navedene pogoste metode razreda Matcher. Ima več metod, vendar smo spodaj navedli le pomembne metode.
| Ne | Metoda | Opis |
|---|---|---|
| 7. | int start () | Daje začetni indeks ujemajoče se podpostavke in jo vrne. |
| 1. | logična ujemanja () | Preveri, ali se regularni izraz ujema z vzorcem. |
| dva | Vzorec vzorca () | Vrne vzorec, ki ga razlaga ujemalec. |
| 3. | logična najdba () | Ta metoda poišče naslednji izraz, ki se ujema z vzorcem. |
| 4. | logična najdba (int začetek) | Enako kot find (), vendar najde izraz, ki se ujema z danega začetnega položaja. |
| 5. | Nizna skupina () | Vrne zaporedje, ki se ujema z vzorcem. |
| 6. | Nizovna skupina (ime niza) | Vrne vhodno zaporedje. To se zajame v prejšnji operaciji ujemanja z zajemom skupine z določenim imenom. |
| 8. | int end () | Vrne končni položaj / indeks ujemajoče se podsekvence. |
| 9. | int groupCount () | Vrne skupno število ujemajočih se podsekvenc. |
| 10. | String replaceAll (zamenjava niza) | Z nadomestnim nizom zamenjajte vse podsekvence vhodnega zaporedja, ki se ujemajo z vzorcem. |
| enajst | String replaceFirst (zamenjava niza) | Zamenjajte prvo ujemajoče se zaporedje vhodnega zaporedja z navedenim nadomestnim nizom. |
| 12. | String toString () | Vrne prikaz trenutnega ujemanja. |
Primer izvedbe regularnega izraza
Oglejmo si primer uporabe nekaterih od teh metod.
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); } } Izhod:
vhodni niz: Morske školjke na morski obali prodaja z školjkami
replaceFirst metoda: Na morski obali z školjkami prodaja morske bisere
replaceAll metoda: Na morski obali prodaja morske bisere z biseri
Razred vzorca Regex v Javi
Razred vzorca definira vzorec za mehanizem regularnih izrazov, ki ga lahko nato uporabimo za ujemanje z vhodnim nizom.
Naslednja tabela prikazuje metode, ki jih ponuja razred Pattern, ki se pogosto uporablja.
| Ne | Metoda | Opis |
|---|---|---|
| 7. | String () split (CharSequence input, int limit) | Vhodni niz je razdeljen na zadetke, ki jih najde določen vzorec. |
| 1. | statično prevajanje vzorca (niz regularnih izrazov) | Vrne sestavljeno predstavitev regularnega izraza. |
| dva | statično prevajanje vzorca (niz regularnega izraza, int zastave) | Sestavi dani regularni izraz z uporabo določenih zastavic in vzorec vrne. |
| 3. | Ujema se z ujemanji (vnos CharSequence) | Vrne ujemanje tako, da vhodno zaporedje ujema z vzorcem. |
| 4. | statična logična ujemanja (regularni izraz niza, vnos CharSequence) | Prevede dani regularni izraz in vzorec ujema z danim vnosom. |
| 5. | int zastave () | Vrne zastavice vzorca, s katerim se izvede ujemanje. |
| 6. | String () split (CharSequence input) | Vhodni niz je razdeljen na zadetke, ki jih najde določen vzorec. |
| 8. | Vzorec niza () | Vrne vzorec regularnega izraza. |
| 9. | statični citat niza (nizi) | Vrne dobesedni niz (vzorec) za dani niz. |
| 10. | String toString () | Pridobite niz vzorca. |
Spodnji primer uporablja nekatere od zgornjih metod razreda 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 Izhod:
array (0) = Dobrodošli v programski opremi
array (1) = portal ingHelp
V zgornjem programu uporabljamo metodo prevajanja za generiranje vzorca. Nato o tem vzorcu razdelimo vhodni niz in ga preberemo v matriko. Na koncu prikažemo matriko, ki je bila ustvarjena kot delitev vhodnega niza.
Metoda ujemanja nizov Regex
Metodo String.Contains () smo videli v naših vajah za niz. Ta metoda vrne logično vrednost true ali false, odvisno od tega, ali niz vsebuje v sebi določen znak ali ne.
Podobno imamo metodo »match ()« za preverjanje, ali se niz ujema z regularnim izrazom ali regularnim izrazom. Če se niz ujema z navedenim regularnim izrazom, se vrne resnična vrednost ali pa vrne false.
Splošna sintaksa metode match ():
public boolean matches (String regex)Če navedeni regularni izraz ni veljaven, se vrže »PatternSyntaxException«.
Uvedimo program za predstavitev uporabe 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')); } } Izhod:
Vhodni niz: Vadnice za serijo Java
Regex: (. *) Java (. *) Se ujema z nizom? prav
Regex: (. *) Serija (. *) Se ujema z nizom? prav
Regex: (. *) Serija (. *) Se ujema z nizom? napačno
Regex: (. *) Vadnice se ujemajo z nizom? prav
V Java uporabljamo veliko posebnih znakov in metaznakov z regularnimi izrazi. Za ujemanje vzorcev uporabljamo tudi veliko razredov znakov. V tem razdelku bomo podali tabele, ki vsebujejo razrede znakov, metaznake in količnike, ki jih je mogoče uporabiti z regularnimi izrazi.
Razredi znakov regularnih izrazov
Ne Razred znakov Opis 7. (a-z && (^ m-p)) Odštevanje: od a do z in ne od m do p: (a-lq-z) 1. (pqr) p, q ali r dva (^ pqr) Negacija: Kateri koli znak, ki ni p, q ali r 3. (a-zA-Z) Razpon: od a do z ali od A do Z vključno 4. (a-d (m-p)) Zveza: od a do d ali od m do p: (a-dm-p) 5. (a-z && (def)) Presečišče: d, e ali f 6. (a-z && (^ bc)) Odštevanje: od a do z, razen b in c: (ad-z)
Merilniki regularnih izrazov
Z merilniki se določi, kolikokrat se bo znak pojavil v regularnem izrazu.
Naslednja tabela prikazuje pogoste merilnike regularnih izrazov, ki se uporabljajo v Javi.
Ne Merilnik regularnih izrazov Opis 7. IN Kateri koli nebesedni znak, (^ w) 1. x? x se pojavi enkrat ali pa se sploh ne dva x + x se prikaže enkrat ali večkrat 3. x * x se pojavi nič ali večkrat 4. x {n} x se pojavi n-krat 5. x {n,} x se pojavi n ali večkrat 6. X in Z} x se pojavi vsaj y-krat, vendar manj kot z-krat
Regex Meta znaki
Metaznaki v regularnem izrazu delujejo kot stenografske kode. Te kode vključujejo presledek in ne-presledek skupaj z drugimi kratkimi kodami.
najboljši brezplačni video prenosnik za Windows
V naslednji tabeli so navedeni znaki meta regularnih izrazov.
Ne Meta znaki Opis 1. . Kateri koli znak (se lahko ujema s terminatorjem ali ne) dva d Poljubne številke, (0-9) 3. D Vse nedimestne številke, (^ 0-9) 4. s Kateri koli presledek, ( t n x0B f r) 5. S Kateri koli znak, ki ni presledek, (^ s) 6. in Kateri koli besedni znak, (a-zA-Z_0-9) 8. b Meja besed 9. B Nebesedna meja
Spodaj je program Java, ki uporablja zgornje posebne znake v regularnem 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?')); } } Izhod:
Jim (jim): napačno
(Pp) eter (Peter): res
. * abc. * (pqabcqp): true
^ (^ d). * (abc123): resnično
(a-zA-Z) (a-zA-Z) (a-zA-Z) (aQz): res
(a-zA-Z) (a-zA-Z) (a-zA-Z), a10zfalse
D *, abcde: true
^ Ta $, to je Java: false
^ Ta $, To: napačno
^ Ta $, je to Java?: False
V zgornjem programu smo podali različne regularne izraze, ki se ujemajo z vhodnim nizom. Bralcem svetujemo, da preberejo komentarje v programu za vsak regularni izraz, da bolje razumejo koncept.
Regex Logic ali (|) Operator
V regularnem izrazu lahko uporabimo logični ali (| operator), ki nam omogoča izbiro operanda | operater. Ta operator lahko uporabimo v regularnem izrazu, da lahko izberemo znak ali niz. Na primer če želimo ujemati obe besedi, 'test' in 'Test', bomo te besede vključili v logični ali operator kot Test | test.
Oglejmo si naslednji primer za razumevanje tega operaterja.
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()); } } } Izhod:
Besedilo 'Test' najdemo med 9 in 13.
Besedilo 'test' najdemo od 8 do 12.
V tem programu smo podali regularni izraz »(Test | test)«. Nato najprej damo vhodni niz kot 'Pomoč za testiranje programske opreme' in se ujema z vzorcem. Vidimo, da je tekma najdena in položaj natisnjen.
Nato vhodni niz damo kot »SoftwaretestingHelp«. Tokrat je najdena tudi tekma. To je zato, ker je regularni izraz uporabil operator ali operator in s tem vzorec na obeh straneh | operator se ujema z nizom.
Preverjanje e-pošte z uporabo regularnega izraza
E-poštni ID (naslov) lahko potrdimo tudi z regularnim izrazom z uporabo metode java.util.regex.Pattern.matches (). Dani e-poštni ID se ujema z regularnim izrazom in vrne true, če je e-poštno sporočilo veljavno.
Naslednji program prikazuje potrditev e-pošte z uporabo regularnega 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)); } } Izhod:
ID e-pošte je: ssthva@gmail.com
ID e-pošte veljaven? prav
ID e-pošte je: @ sth @ gmail.com
ID e-pošte veljaven? napačno
Kot lahko vidimo iz zgornjega izhoda, je prvi e-poštni ID veljaven. Drugi id se neposredno začne z @, zato ga regularni izraz ne potrdi. Zato je neveljaven ID.
kako odpreti datoteko jnlp windows 10
Pogosto zastavljena vprašanja
V # 1) Kaj je v regularnem izrazu?
Odgovor: TO Vsakdanje izražanje običajno imenovan regularni izraz je vzorec ali zaporedje znakov (običajnih ali posebnih ali Meta znakov), ki se uporablja za preverjanje vhodnega niza.
V # 2) Kakšen pomen ima razred Matcher za regularni izraz v Javi?
Odgovor: Razred ujemanja (java.util.regex.Matcher) deluje kot motor regularnih izrazov. Operacije ujemanja izvaja z interpretacijo vzorca.
V # 3) Kakšen je vzorec v Javi?
Odgovor: Paket java.util.regex ponuja razred Pattern, ki se uporablja za prevajanje regularnega izraza v vzorec, ki je standardni prikaz regularnega izraza. Ta vzorec se nato uporablja za preverjanje nizov, tako da se ujema z vzorcem.
V # 4) Kaj je B v regularnem izrazu?
Odgovor: B v regularnem izrazu je označen z b in je sidrni znak, ki se uporablja za ujemanje položaja, imenovanega meja besed. Začetek vrstice je označen s tipko (^), konec vrstice pa z dolarjem ($).
V # 5) Ali je Java vzorčno varna z nitmi?
Odgovor: Da. Primerki razreda Pattern so nespremenljivi in varni za uporabo v več sočasnih nitih. Toda primerki razreda matcher niso varni pred nitmi.
Zaključek
V tej vadnici smo razpravljali o regularnih izrazih v Javi. Regularni izraz, znan tudi kot 'regularni izraz', se uporablja za preverjanje vhodnega niza v Javi. Java ponuja java.util.regex ' paket, ki ponuja razrede, kot so Pattern, Matcher itd., ki pomagajo določiti vzorec in ga ujemati z vhodnim nizom.
Videli smo tudi različne posebne razrede znakov in metaznake, ki jih lahko uporabimo v regularnem izrazu, ki dajejo kratice za ujemanje vzorcev. Raziskali smo tudi preverjanje e-pošte z uporabo regularnega izraza.
=> Tukaj raziščite preprosto vadbeno serijo Java.
Priporočeno branje