java regex tutorial with regular expression examples
Denne Java Regex-vejledning forklarer, hvad der er et regulært udtryk i Java, hvorfor vi har brug for det, og hvordan man bruger det ved hjælp af eksempler på regulært udtryk:
TIL almindelig udtryk i Java, der forkortes som “ regex ”Er et udtryk, der bruges til at definere et søgemønster for strenge.
Søgemønsteret kan være et simpelt tegn eller en understreng, eller det kan være en kompleks streng eller et udtryk, der definerer et bestemt mønster, der skal søges i strengen.
Yderligere kan mønsteret muligvis matche en eller flere gange med strengen.
=> Besøg her for at se Java Training Series for alle.
Hvad du lærer:
Regelmæssig udtryk: hvorfor vi har brug for det
Et regulært udtryk bruges hovedsageligt til at søge efter et mønster i en streng. Hvorfor søger vi efter et mønster i en streng? Vi vil måske finde et bestemt mønster i en streng og derefter manipulere det eller redigere det.
Så i en computerapplikation har vi muligvis et kontinuerligt krav om at manipulere forskellige mønstre. Derfor kræver vi altid regex for at lette søgningen efter mønsteret.
Nu fået et mønster at søge efter, hvordan fungerer regex nøjagtigt?
Når vi analyserer og ændrer teksten ved hjælp af en regex, siger vi, at 'vi har anvendt regex på strengen eller teksten'. Hvad vi gør er, at vi anvender mønsteret på teksten i en 'venstre mod højre' retning, og kildestrengen matches med mønsteret.
For eksempel, overvej en streng “ ababababab ”. Lad os antage, at en regex 'aba' er defineret. Så nu skal vi anvende denne regex til strengen. Anvendelse af regex fra venstre mod højre, vil regex matche strengen “ aba_aba___ ”To steder.
Når en kildekarakter er brugt i en kamp, kan vi således ikke genbruge den. Efter at have fundet den første kamp aba blev det tredje tegn 'a' således ikke genbrugt.
god gratis musik downloader til android
java.util.regex
Java-sprog indeholder ingen indbygget klasse til regex. Men vi kan arbejde med regulære udtryk ved at importere ' java.util.regex ' pakke.
Pakken java.util.regex har en grænseflade og tre klasser som vist nedenfor:

Mønster klasse: En mønsterklasse repræsenterer den kompilerede regex. Mønsterklassen har ingen offentlige konstruktører, men den giver statiske compile () -metoder, der returnerer mønsterobjekter og kan bruges til at oprette et mønster.
Matcher klasse: Matcher-klasseobjektet matcher regex-mønsteret til strengen. Ligesom mønsterklasse giver denne klasse heller ikke nogen offentlige konstruktører. Det giver matcher () -metoden, der returnerer et Matcher-objekt.
MønsterSyntaksUndtagelse: Denne klasse definerer en ukontrolleret undtagelse. Et objekt af typen PatternSyntaxException returnerer en ukontrolleret undtagelse, der angiver en syntaksfejl i regex-mønster.
MatchResult-grænseflade: MatchResult-grænsefladen bestemmer resultatet for matchning af regex-mønster.
Java Regex-eksempel
Lad os implementere et simpelt eksempel på regex i Java. I nedenstående program har vi en simpel streng som mønster, og derefter matcher vi den med en streng. Outputtet udskriver start- og slutpositionen i den streng, hvor mønsteret findes.
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)); } } Produktion:
Mønster fundet fra 15 til 19
Regex Matcher i Java
Matcher-klassen implementerer MatchResult-grænsefladen. Matcher fungerer som en regex-motor og bruges til at udføre den nøjagtige matching af en tegnsekvens.
Nedenfor er de almindelige metoder i Matcher-klassen. Det har flere metoder, men vi har kun angivet de vigtige metoder nedenfor.
| Lade være med | Metode | Beskrivelse |
|---|---|---|
| 7 | int start () | Giver startindekset for matchet efterfølgende og returnerer det. |
| 1 | boolske kampe () | Kontrollerer, om regex matcher mønsteret. |
| to | Mønster mønster () | Returnerer det mønster, som matcheren fortolker. |
| 3 | boolsk fund () | Denne metode finder det næste udtryk, der skal matches med mønsteret. |
| 4 | boolsk find (int start) | Samme som find (), men finder det udtryk, der skal matches fra den givne startposition. |
| 5 | Strenggruppe () | Returnerer den sekvens, der matcher mønsteret. |
| 6 | Strenggruppe (strengnavn) | Returnerer indgangssekvensen. Dette fanges i den tidligere kampoperation ved at fange gruppen med det angivne navn. |
| 8 | int ende () | Returnerer slutposition / indeks for matchet efterfølgende. |
| 9 | int groupCount () | Returner det samlede antal matchede efterfølgende. |
| 10 | Streng erstatte alle (Streng udskiftning) | Udskift alle sekvenser af indgangssekvensen, der matcher mønsteret, ved at give en erstatningsstreng. |
| elleve | String erstatte Først (String udskiftning) | Erstat den første matchende sekvens af indgangssekvensen med den angivne erstatningsstreng. |
| 12 | String toString () | Returner strengrepræsentationen for den aktuelle matcher. |
Eksempel på implementering af regulært udtryk
Lad os se et eksempel på brugen af nogle af disse metoder.
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); } } Produktion:
input streng: Hun sælger skaller på kysten med skaller
erstatte første metode: Hun sælger havperler på kysten med skaller
replAll metode: Hun sælger havperler på kysten med perler
Regex mønster klasse i Java
Mønsterklasse definerer mønsteret for regex-motoren, som derefter kan bruges til at matche med inputstrengen.
Følgende tabel viser de metoder, der leveres af den mønsterklasse, der ofte bruges.
| Lade være med | Metode | Beskrivelse |
|---|---|---|
| 7 | Streng () split (CharSequence input, int grænse) | Inputstrengen er opdelt omkring matches fundet af et givet mønster. |
| 1 | statisk mønster kompilering (String regex) | Returnerer kompileret repræsentation af regex. |
| to | statisk mønsterkompilering (String regex, int-flag) | Kompilerer givet regex ved hjælp af specificeret flag og returnerer mønster. |
| 3 | Matcher matches (CharSequence-input) | Returnerer en matcher ved at matche indgangssekvensen med mønsteret. |
| 4 | statiske boolske matches (String regex, CharSequence input) | Kompilerer den givne regex og matcher mønsteret med en given input. |
| 5 | int-flag () | Returnerer flag af det mønster, som matchningen foretages med. |
| 6 | Streng () split (CharSequence input) | Inputstrengen er opdelt omkring matches fundet af et givet mønster. |
| 8 | Strengmønster () | Returnerer mønsteret for regulært udtryk. |
| 9 | statisk streng citat (streng s) | Returnerer en bogstavelig streng (mønster) for den givne streng. |
| 10 | String toString () | Få strengrepræsentation af mønsteret. |
Nedenstående eksempel bruger nogle af de ovennævnte metoder til mønsterklasse.
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 Produktion:
array (0) = Velkommen til software
array (1) = ingHjælpportal
I ovenstående program bruger vi kompileringsmetoden til at generere et mønster. Derefter deler vi inputstrengen om dette mønster og læser det i en matrix. Endelig viser vi det array, der blev genereret som et resultat af opdeling af inputstrengen.
Regex-strengemetoder
Vi har set metoden String.Contains () i vores streng-tutorials. Denne metode returnerer en boolsk værdi sand eller falsk afhængigt af om strengen indeholder et bestemt tegn i det eller ej.
På samme måde har vi en metode 'matches ()' til at kontrollere, om strengen matcher med et regulært udtryk eller regex. Hvis strengen matcher den angivne regex, returneres en sand værdi, ellers returneres false.
Den generelle syntaks for metoden matches ():
public boolean matches (String regex)Hvis den angivne regex ikke er gyldig, kastes 'PatternSyntaxException'.
Lad os implementere et program til at demonstrere brugen af matches () -metoden.
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')); } } Produktion:
Inputstreng: Java-serievejledninger
Regex: (. *) Java (. *) Matcher streng? sand
Regex: (. *) Series (. *) Matcher streng? sand
Regex: (. *) Series (. *) Matcher streng? falsk
Regex: (. *) Selvstudier matcher streng? sand
Vi bruger masser af specialtegn og metategn med regelmæssige udtryk i Java. Vi bruger også mange karakterklasser til mønstermatchning. I dette afsnit giver vi de tabeller, der indeholder karakterklasser, Meta-tegn og kvantificeringsmidler, der kan bruges med regex.
Regex karakterklasser
Lade være med Karakterklasse Beskrivelse 7 (a-z && (^ m-p)) Subtraktion: a til z, og ikke m gennem p: (a-lq-z) 1 (pqr) p, q eller r to (^ pqr) Negation: Enhver anden karakter end p, q eller r 3 (a-zA-Z) Område: a til z eller A til Z inklusive 4 (a-d (m-p)) Union: a til d eller m til p: (a-dm-p) 5 (a-z && (def)) Skæringspunkt: d, e eller f 6 (a-z && (^ bc)) Subtraktion: a til z undtagen b og c: (ad-z)
Regex-kvantifikatorer
Kvantificeringsanordninger bruges til at specificere det antal gange, tegnet vil forekomme i regexen.
Den følgende tabel viser de almindelige regex-kvantificeringsanordninger, der bruges i Java.
Lade være med Regex-kvantificering Beskrivelse 7 I Ethvert tegn, der ikke er ord, (^ w) 1 x? x vises en gang eller slet ikke to x + x vises en eller flere gange 3 x * x forekommer nul eller flere gange 4 x {n} x forekommer n gange 5 x {n,} x forekommer n eller flere gange 6 X og Z} x forekommer mindst y gange, men mindre end z gange
Regex Meta-tegn
Metategnene i regex fungerer som stenografiske koder. Disse koder inkluderer mellemrumstegn og ikke-mellemrumstegn sammen med andre kortkoder.
char til int i c ++
Den følgende tabel viser regex Meta-tegn.
Lade være med Metakarakterer Beskrivelse 1 . Ethvert tegn (matcher eventuelt terminator) to d Eventuelle cifre, (0-9) 3 D Enhver ikke-cifret, (^ 0-9) 4 s Ethvert mellemrumstegn, ( t n x0B f r) 5 S Ethvert tegn, der ikke er mellemrum, (^ s) 6 i Ethvert ordkarakter, (a-zA-Z_0-9) 8 b En ordgrænse 9 B En grænse uden ord
Nedenfor er et Java-program, der bruger ovenstående specialtegn i Regex.
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?')); } } Produktion:
Jim (jim): falsk
(Pp) eter (Peter): sandt
. * abc. * (pqabcqp): sandt
^ (^ d). * (abc123): sandt
(a-zA-Z) (a-zA-Z) (a-zA-Z) (aQz): sand
(a-zA-Z) (a-zA-Z) (a-zA-Z), a10zfalsk
D *, abcde: sandt
^ Denne $, Dette er Java: falsk
^ Denne $, Dette: falsk
^ Denne $, er dette Java?: Falsk
I ovenstående program har vi leveret forskellige regexes, der matches med inputstrengen. Læsere rådes til at læse kommentarerne i programmet for hver regex for bedre at forstå konceptet.
Regex Logical eller (|) Operator
Vi kan bruge det logiske eller (| operator) i regex, der giver os valget om at vælge en af operanderne | operatør. Vi kan bruge denne operator i en regex til at give et valg af karakter eller streng. For eksempel, hvis vi ønsker at matche begge ordene 'test' og 'Test', så inkluderer vi disse ord i logisk eller operator som Test | test.
Lad os se følgende eksempel for at forstå denne operatør.
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()); } } } Produktion:
Tekst 'Test' fundet ved 9 til 13.
Tekst “test” fundet ved 8 til 12.
I dette program har vi leveret regex “(Test | test)”. Derefter giver vi inputstrengen som “Software Testing Help” og matcher mønsteret. Vi ser, at kampen er fundet, og positionen udskrives.
Dernæst giver vi inputstrengen som “SoftwaretestingHelp”. Denne gang findes også kampen. Dette skyldes, at regex har brugt eller operator og dermed mønsteret på hver side af | operatør matches med strengen.
E-mail-validering ved hjælp af Regex
Vi kan også validere e-mail-id (adresse) med regex ved hjælp af metoden java.util.regex.Pattern.matches (). Det matcher det givne e-mail-id med regex og returnerer sandt, hvis e-mailen er gyldig.
Det følgende program demonstrerer validering af e-mail ved hjælp af regex.
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)); } } Produktion:
E-mail-id'et er: ssthva@gmail.com
E-mail-id gyldigt? sand
E-mail-id'et er: @ sth @ gmail.com
E-mail-id gyldigt? falsk
Som vi kan se fra ovenstående output, er det første e-mail-id gyldigt. Det andet id starter direkte med @, og derfor validerer regex det ikke. Derfor er det et ugyldigt id.
etl tester interview spørgsmål og svar
Ofte stillede spørgsmål
Q # 1) Hvad er der i et regulært udtryk?
Svar: TIL Almindelig udtryk almindeligvis kaldet regex er et mønster eller en sekvens af tegn (normale eller specielle eller metategn), der bruges til at validere en inputstreng.
Spørgsmål nr. 2) Hvad betyder Matcher-klassen for et regulært udtryk i Java?
Svar: Matcher-klassen (java.util.regex.Matcher) fungerer som en regex-motor. Den udfører de matchende operationer ved at fortolke mønsteret.
Q # 3) Hvad er mønsteret i Java?
Svar: Pakken java.util.regex giver en mønsterklasse, der bruges til at kompilere en regex til et mønster, der er standardrepræsentationen for regex. Dette mønster bruges derefter til at validere strenge ved at matche det med mønsteret.
Q # 4) Hvad er B i et regulært udtryk?
Svar: B i regex betegnes som b og er et ankertegn, der bruges til at matche en position kaldet ordgrænse. Starten på linjen er betegnet med et tegn (^), og slutningen af linjen er angivet med et dollartegn ($).
Q # 5) Er mønstertrådsikker Java?
Svar: Ja. Forekomster af mønsterklassen er uforanderlige og sikre til brug af flere samtidige tråde. Men de matchende klasseforekomster er ikke trådsikre.
Konklusion
I denne vejledning har vi diskuteret Regular Expressions i Java. Det regulære udtryk, der også er kendt som 'regex', bruges til at validere inputstrengen i Java. Java giver ' java.util.regex ' pakke, der giver klasser som Mønster, Matcher osv., der hjælper med at definere og matche mønsteret med inputstrengen.
Vi har også set forskellige specialtegnklasser og metategn, som vi kan bruge i regex, der giver stenografiske koder til mønstermatchning. Vi undersøgte også validering af e-mail ved hjælp af regex.
=> Udforsk Simple Java Training Series her.
Anbefalet læsning