java regex tutorial with regular expression examples
Denne Java Regex-opplæringen forklarer hva som er et vanlig uttrykk i Java, hvorfor vi trenger det, og hvordan du bruker det ved hjelp av eksempler på vanlig uttrykk:
TIL vanlig uttrykk i Java som forkortes som “ regex ”Er et uttrykk som brukes til å definere et søkemønster for strenger.
Søkemønsteret kan være et enkelt tegn eller en understreng, eller det kan være en kompleks streng eller et uttrykk som definerer et bestemt mønster som skal søkes i strengen.
Videre kan mønsteret måtte matche en eller flere ganger med strengen.
=> Besøk her for å se Java Training Series for alle.
Hva du vil lære:
Regelmessig uttrykk: hvorfor vi trenger det
Et vanlig uttrykk brukes hovedsakelig for å søke etter et mønster i en streng. Hvorfor søker vi etter et mønster i en streng? Vi vil kanskje finne et bestemt mønster i en streng og deretter manipulere det eller redigere det.
Så i et dataprogram kan vi ha et kontinuerlig krav om å manipulere forskjellige mønstre. Derfor krever vi alltid regex for å lette søket etter mønsteret.
Nå gitt et mønster å søke etter, hvordan fungerer regex akkurat?
Når vi analyserer og endrer teksten ved hjelp av en regex, sier vi at ‘vi har brukt regex på strengen eller teksten’. Det vi gjør er at vi bruker mønsteret til teksten i en ‘venstre mot høyre’ retning, og kildestrengen blir matchet med mønsteret.
For eksempel, vurdere en streng “ ababababab ”. La oss anta at en regex 'aba' er definert. Så nå må vi bruke denne regexen på strengen. Ved å bruke regex fra venstre til høyre, vil regex samsvare med strengen “ aba_aba___ ”, To steder.
Så snart en kildetegn er brukt i en kamp, kan vi ikke bruke den på nytt. Etter at den første kampen aba ble funnet, ble ikke det tredje tegnet ‘a’ gjenbrukt.
pl sql intervju spørsmål og svar for erfaren pdf
java.util.regex
Java-språk gir ingen innebygd klasse for regex. Men vi kan jobbe med vanlige uttrykk ved å importere ' java.util.regex ”Pakke.
Pakken java.util.regex gir ett grensesnitt og tre klasser som vist nedenfor:
Mønster klasse: En mønsterklasse representerer den kompilerte regexen. Mønster-klassen har ingen offentlige konstruktører, men den gir statiske kompileringsmetoder () som returnerer mønsterobjekter og kan brukes til å lage et mønster.
Matcherklasse: Matcher-klasseobjektet samsvarer med regex-mønsteret til strengen. I likhet med Mønster-klasse, gir denne klassen heller ikke noen offentlige konstruktører. Det gir matcher () -metoden som returnerer et Matcher-objekt.
Mønster Syntaks Eksepsjon: Denne klassen definerer et ukontrollert unntak. Et objekt av typen PatternSyntaxException returnerer et ukontrollert unntak som indikerer en syntaksfeil i regex-mønster.
MatchResult-grensesnitt: MatchResult-grensesnittet bestemmer resultatet for regex-mønster.
Java Regex-eksempel
La oss implementere et enkelt eksempel på regex i Java. I programmet nedenfor har vi en enkel streng som mønster, og deretter matcher vi den med en streng. Utgangen skriver ut start- og sluttposisjonen i strengen der mønsteret er funnet.
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)); } }
Produksjon:
Mønster funnet fra 15 til 19
standard gateway ikke tilgjengelig windows 10 fix
Regex Matcher i Java
Matcherklassen implementerer MatchResult-grensesnittet. Matcher fungerer som en regex-motor og brukes til å utføre den nøyaktige matching av en tegnsekvens.
Nedenfor er de vanlige metodene i Matcher-klassen. Den har flere metoder, men vi har bare oppført de viktige metodene nedenfor.
Ikke | Metode | Beskrivelse |
---|---|---|
7 | int start () | Gir startindeksen for samsvarende undersøkelse og returnerer den. |
1 | boolske kamper () | Sjekker om regex samsvarer med mønsteret. |
to | Mønster mønster () | Returnerer mønsteret som matcheren tolker. |
3 | boolsk funn () | Denne metoden finner neste uttrykk som skal matches med mønsteret. |
4 | boolsk funn (int start) | Samme som find (), men finner uttrykket som skal matches fra den gitte startposisjonen. |
5 | Strenggruppe () | Returnerer følgen som samsvarer med mønsteret. |
6 | Strenggruppe (strengnavn) | Returnerer inngangssekvensen. Dette fanges opp i den tidligere kampoperasjonen ved å fange gruppen med det angitte navnet. |
8 | int end () | Returnerer sluttposisjon / indeks for matchet sekvens. |
9 | int groupCount () | Returner det totale antallet matchede undersøkelser. |
10 | Streng erstatte Alle (Streng erstatning) | Erstatt alle sekvenser av inngangssekvensen som samsvarer med mønsteret med gitt erstatningsstreng. |
elleve | Streng erstatte første (streng erstatning) | Erstatt den første matchende sekvensen av inngangssekvensen med den angitte erstatningsstrengen. |
12 | String toString () | Returner strengrepresentasjonen til gjeldende matcher. |
Eksempel på implementering av regulært uttrykk
La oss se et eksempel på bruken av noen av disse metodene.
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); } }
Produksjon:
input streng: Hun selger skjell på strandkanten med skjell
erstatteFørste metode: Hun selger havperler i strandkanten med skjell
erstatte Alle metoden: Hun selger havperler på strandkanten med perler
Regex mønster klasse i Java
Mønsterklasse definerer mønsteret for regex-motoren som deretter kan brukes til å matche med inngangsstrengen.
Tabellen nedenfor viser metodene som tilbys av mønsterklassen som ofte brukes.
Ikke | Metode | Beskrivelse |
---|---|---|
7 | Streng () split (CharSequence input, int limit) | Inngangsstrengen er delt rundt treff funnet av et gitt mønster. |
1 | statisk mønsterkompilering (String regex) | Returnerer samlet representasjon av regex. |
to | statisk mønsterkompilering (String regex, int-flagg) | Kompilerer gitt regex ved hjelp av spesifiserte flagg og returmønster. |
3 | Matcher treff (CharSequence-inngang) | Returnerer en matcher ved å matche inngangssekvensen med mønsteret. |
4 | statiske boolske kamper (String regex, CharSequence input) | Kompilerer gitt regex og samsvarer med mønsteret med en gitt input. |
5 | int flagg () | Returnerer flagg for mønsteret som samsvaringen gjøres med. |
6 | Streng () split (CharSequence input) | Inngangsstrengen er delt rundt treff funnet av et gitt mønster. |
8 | Strengmønster () | Returnerer det vanlige uttrykksmønsteret. |
9 | statisk streng sitat (streng s) | Returnerer en bokstavelig streng (mønster) for den gitte strengen. |
10 | String toString () | Få strengrepresentasjon av mønsteret. |
Eksemplet nedenfor bruker noen av metodene ovenfor for 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 Produksjon:
array (0) = Velkommen til programvare
array (1) = ingHelp portal
I programmet ovenfor bruker vi kompileringsmetoden for å generere et mønster. Så deler vi inngangsstrengen om dette mønsteret og leser den inn i en matrise. Til slutt viser vi matrisen som ble generert som et resultat av å dele inndatastrengen.
Regex strengemetoder
Vi har sett String.Contains () -metoden i strengopplæringsprogrammene våre. Denne metoden returnerer en boolsk verdi true eller false, avhengig av om strengen inneholder et spesifisert tegn i den eller ikke.
På samme måte har vi en metode 'matches ()' for å sjekke om strengen samsvarer med et regulært uttrykk eller regex. Hvis strengen samsvarer med den angitte regexen, returneres en sann verdi, ellers returneres false.
Den generelle syntaksen for matches () -metoden:
public boolean matches (String regex)
Hvis den angitte regexen ikke er gyldig, kastes 'PatternSyntaxException'.
La oss implementere et program for å demonstrere bruken av 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')); } }
Produksjon:
Input String: Java Series Tutorials
Regex: (. *) Java (. *) Samsvarer med streng? ekte
Regex: (. *) Series (. *) Matches string? ekte
Regex: (. *) Series (. *) Matches string? falsk
Regex: (. *) Opplæringsprogrammer samsvarer med streng? ekte
Vi bruker mange spesialtegn og metategn med vanlige uttrykk i Java. Vi bruker også mange karakterklasser for mønstermatching. I denne delen vil vi gi tabellene som inneholder karakterklasser, Meta-tegn og Kvantifiserere som kan brukes med regex.
Regex karakterklasser
Ikke Karakterklasse Beskrivelse 7 (a-z && (^ m-p)) Subtraksjon: a til z, og ikke m gjennom p: (a-lq-z) 1 (pqr) p, q eller r to (^ pqr) Negasjon: Ethvert tegn annet enn p, q eller r 3 (a-zA-Z) Område: a til z eller A til og med, inkludert 4 (a-d (m-p)) Union: a til d, eller m til p: (a-dm-p) 5 (a-z && (def)) Kryss: d, e eller f 6 (a-z && (^ bc)) Subtraksjon: a til z, bortsett fra b og c: (ad-z)
Regex-kvantifiserere
Kvantifiserere brukes til å spesifisere antall ganger tegnet skal forekomme i regexen.
Tabellen nedenfor viser de vanlige regex-kvantifisererne som brukes i Java.
Ikke Regex kvantifier Beskrivelse 7 I Alle tegn som ikke er ord, (^ w) 1 x? x vises en gang eller ikke i det hele tatt to x + x vises en eller flere ganger 3 x * x forekommer null eller flere ganger 4 x {n} x forekommer n ganger 5 x {n,} x forekommer n eller flere ganger 6 X og Z} x forekommer minst y ganger, men mindre enn z ganger
Regex Meta-tegn
Metategnene i regex fungerer som stenografiske koder. Disse kodene inkluderer mellomrom og tegn som ikke er mellomrom sammen med andre kortkoder.
Den følgende tabellen viser regex Meta-tegn.
Ikke Metategn Beskrivelse 1 . Ethvert tegn (matcher eventuelt terminator) to d Eventuelle sifre, (0-9) 3 D Eventuelt ikke-sifret, (^ 0-9) 4 s Eventuelt hvitt mellomromstegn, ( t n x0B f r) 5 S Ethvert tegn som ikke er mellomrom, (^ s) 6 i Ethvert ordkarakter, (a-zA-Z_0-9) 8 b En ordgrense 9 B En ikke-ordgrense
Nedenfor er et Java-program som bruker de ovennevnte spesialtegnene 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?')); } }
Produksjon:
Jim (jim): falsk
(Pp) eter (Peter): sant
. * abc. * (pqabcqp): sant
^ (^ d). * (abc123): sant
(a-zA-Z) (a-zA-Z) (a-zA-Z) (aQz): sant
(a-zA-Z) (a-zA-Z) (a-zA-Z), a10zfalse
D *, abcde: sant
^ Denne $, Dette er Java: falsk
^ Denne $, Dette: falsk
^ Dette $, er dette Java?: Falsk
I det ovennevnte programmet har vi gitt forskjellige regekser som samsvarer med inngangsstrengen. Lesere anbefales å lese kommentarene i programmet for hver regex for å bedre forstå konseptet.
Regex Logical eller (|) Operator
Vi kan bruke det logiske eller (| operator) i regex som gir oss muligheten til å velge enten operand av | operatør. Vi kan bruke denne operatøren i en regex for å gi et valg av karakter eller streng. For eksempel, hvis vi vil matche både ordene, 'test' og 'Test', så vil vi inkludere disse ordene i logisk eller operatør som Test | test.
La oss se følgende eksempel for å forstå denne operatøren.
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()); } } }
Produksjon:
Tekst “Test” funnet kl. 9 til 13.
Tekst 'test' funnet klokka 8 til 12.
I dette programmet har vi gitt regexen “(Test | test)”. Så først gir vi inngangsstrengen som “Software Testing Help” og matcher mønsteret. Vi ser at treffet er funnet og posisjonen skrives ut.
Deretter gir vi inngangsstrengen som “SoftwaretestingHelp”. Denne gangen er også kampen funnet. Dette er fordi regex har brukt eller operator og dermed mønsteret på hver side av | operatøren blir matchet med strengen.
E-postvalidering ved hjelp av Regex
Vi kan også validere e-post-id (adresse) med regex ved hjelp av metoden java.util.regex.Pattern.matches (). Den samsvarer med den oppgitte e-post-ID-en med regex og returnerer true hvis e-postadressen er gyldig.
Følgende program viser validering av e-post ved hjelp av 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)); } }
Produksjon:
E-post-ID-en er: ssthva@gmail.com
E-post-ID gyldig? ekte
E-post-ID-en er: @ sth @ gmail.com
E-post-ID gyldig? falsk
Som vi kan se fra ovenstående utgang, er den første e-post-IDen gyldig. Den andre ID-en starter direkte med @, og dermed validerer ikke regex den. Derfor er det en ugyldig ID.
hvordan du bruker søvn i c ++
ofte stilte spørsmål
Q # 1) Hva er i et vanlig uttrykk?
Svar: TIL Vanlig uttrykk ofte kalt regex er et mønster eller en sekvens av tegn (normale eller spesielle eller Meta-tegn) som brukes til å validere en inngangsstreng.
Q # 2) Hva er betydningen av Matcher-klassen for et vanlig uttrykk i Java?
Svar: Matcher-klassen (java.util.regex.Matcher) fungerer som en regex-motor. Den utfører samsvarende operasjoner ved å tolke mønsteret.
Q # 3) Hva er mønsteret i Java?
Svar: Pakken java.util.regex gir en mønsterklasse som brukes til å kompilere en regex til et mønster som er standard representasjon for regex. Dette mønsteret brukes deretter til å validere strenger ved å matche det med mønsteret.
Q # 4) Hva er B i et vanlig uttrykk?
Svar: B i regex er betegnet som b og er et ankertegn som brukes til å matche en posisjon kalt ordgrense. Starten på linjen er betegnet med et innskudd (^) og slutten på linjen er angitt med et dollartegn ($).
Q # 5) Er mønster trådsikker Java?
Svar: Ja. Forekomster av mønsterklassen er uforanderlige og trygge for bruk av flere samtidige tråder. Men matcherklasseforekomstene er ikke trådsikre.
Konklusjon
I denne opplæringen har vi diskutert Regular Expressions i Java. Reguleringsuttrykket som også er kjent som ‘regex’ brukes til å validere inngangsstrengen i Java. Java gir java.util.regex ' pakke som gir klasser som Mønster, Matcher osv. som hjelper til med å definere og matche mønsteret med inngangsstrengen.
Vi har også sett forskjellige spesialtegnklasser og metategn som vi kan bruke i regexen som gir stenografiske koder for mønstermatching. Vi undersøkte også validering av e-post ved hjelp av regex.
=> Utforsk Simple Java Training Series her.
Anbefalt lesing