logo

Java Regex

De Java Regex of Reguliere expressie is een API hiervoor definieer een patroon voor het zoeken of manipuleren van tekenreeksen .

Het wordt veel gebruikt om de beperking op strings zoals wachtwoord- en e-mailvalidatie te definiëren. Nadat u de Java Regex-tutorial heeft geleerd, kunt u uw reguliere expressies testen met de Java Regex Tester Tool.

Java Regex API biedt 1 interface en 3 klassen in java.util.regex pakket.

java.util.regex-pakket

De klassen Matcher en Pattern bieden de mogelijkheid tot reguliere Java-expressie. Het pakket java.util.regex biedt de volgende klassen en interfaces voor reguliere expressies.

  1. MatchResult-interface
  2. Matcher-klasse
  3. Patroon klasse
  4. PatternSyntaxException-klasse
Java Regex-API

Matcher-klasse

Het implementeert de MatchResultaat koppel. Het is een regex-motor die wordt gebruikt om matchbewerkingen uit te voeren op een tekenreeks.

Nee.MethodeBeschrijving
1Booleaanse overeenkomsten()testen of de reguliere expressie overeenkomt met het patroon.
2Booleaanse vondst()vindt de volgende uitdrukking die overeenkomt met het patroon.
3Booleaanse vondst(int start)vindt de volgende uitdrukking die overeenkomt met het patroon vanaf het opgegeven startnummer.
4Tekenreeksgroep()retourneert de overeenkomende deelreeks.
5int begin()retourneert de startindex van de overeenkomende deelreeks.
6int einde()retourneert de eindindex van de overeenkomende deelreeks.
7int groupCount()retourneert het totale getal van de overeenkomende deelreeks.

Patroon klasse

Het is de gecompileerde versie van een reguliere expressie . Het wordt gebruikt om een ​​patroon voor de regex-engine te definiëren.

Nee.MethodeBeschrijving
1statisch patroon compileren (String regex)compileert de gegeven regex en retourneert de instantie van het patroon.
2Matcher-matcher (CharSequence-invoer)creëert een matcher die de gegeven invoer matcht met het patroon.
3statische Booleaanse overeenkomsten (String regex, CharSequence-invoer)Het werkt als de combinatie van compileer- en matchermethoden. Het compileert de reguliere expressie en matcht de gegeven invoer met het patroon.
4String[] split(CharSequence-invoer)splitst de gegeven invoerreeks rond overeenkomsten van een bepaald patroon.
5Tekenreekspatroon()retourneert het regex-patroon.

Voorbeeld van reguliere Java-expressies

Er zijn drie manieren om het regex-voorbeeld in Java te schrijven.

 import java.util.regex.*; public class RegexExample1{ public static void main(String args[]){ //1st way Pattern p = Pattern.compile('.s');//. represents single character Matcher m = p.matcher('as'); boolean b = m.matches(); //2nd way boolean b2=Pattern.compile('.s').matcher('as').matches(); //3rd way boolean b3 = Pattern.matches('.s', 'as'); System.out.println(b+' '+b2+' '+b3); }} 
Test het nu

Uitvoer

 true true true 

Reguliere expressie. Voorbeeld

De . (punt) vertegenwoordigt een enkel teken.

 import java.util.regex.*; class RegexExample2{ public static void main(String args[]){ System.out.println(Pattern.matches('.s', 'as'));//true (2nd char is s) System.out.println(Pattern.matches('.s', 'mk'));//false (2nd char is not s) System.out.println(Pattern.matches('.s', 'mst'));//false (has more than 2 char) System.out.println(Pattern.matches('.s', 'amms'));//false (has more than 2 char) System.out.println(Pattern.matches('..s', 'mas'));//true (3rd char is s) }} 
Test het nu

Regex-tekenklassen

Nee.KarakterklasseBeschrijving
1[abc]a, b of c (eenvoudige klasse)
2[^abc]Elk teken behalve a, b of c (negatie)
3[a-zA-Z]a t/m z of A t/m Z, inclusief (bereik)
4[a-d[m-p]]a tot en met d, of m tot en met p: [a-dm-p] (vereniging)
5[a-z&&[def]]d, e of f (kruispunt)
6[a-z&&[^bc]]a t/m z, behalve b en c: [ad-z] (aftrekken)
7[a-z&&[^m-p]]a tot en met z, en niet m tot en met p: [a-lq-z](aftrekken)

Reguliere expressie Tekenklassen Voorbeeld

 import java.util.regex.*; class RegexExample3{ public static void main(String args[]){ System.out.println(Pattern.matches('[amn]', 'abcd'));//false (not a or m or n) System.out.println(Pattern.matches('[amn]', 'a'));//true (among a or m or n) System.out.println(Pattern.matches('[amn]', 'ammmna'));//false (m and a comes more than once) }} 
Test het nu

Regex-kwantificatoren

De kwantoren specificeren het aantal keren dat een teken voorkomt.

RegexBeschrijving
X?X komt één keer of helemaal niet voor
X+X komt één of meerdere keren voor
X*X komt nul of vaker voor
X{n}X komt slechts n keer voor
X{n,}X komt n of meer keren voor
X{y,z}X komt minstens y keer voor, maar minder dan z keer

Reguliere expressietekenklassen en kwantoren Voorbeeld

 import java.util.regex.*; class RegexExample4{ public static void main(String args[]){ System.out.println('? quantifier ....'); System.out.println(Pattern.matches('[amn]?', 'a'));//true (a or m or n comes one time) System.out.println(Pattern.matches('[amn]?', 'aaa'));//false (a comes more than one time) System.out.println(Pattern.matches('[amn]?', 'aammmnn'));//false (a m and n comes more than one time) System.out.println(Pattern.matches('[amn]?', 'aazzta'));//false (a comes more than one time) System.out.println(Pattern.matches('[amn]?', 'am'));//false (a or m or n must come one time) System.out.println('+ quantifier ....'); System.out.println(Pattern.matches('[amn]+', 'a'));//true (a or m or n once or more times) System.out.println(Pattern.matches('[amn]+', 'aaa'));//true (a comes more than one time) System.out.println(Pattern.matches('[amn]+', 'aammmnn'));//true (a or m or n comes more than once) System.out.println(Pattern.matches('[amn]+', 'aazzta'));//false (z and t are not matching pattern) System.out.println('* quantifier ....'); System.out.println(Pattern.matches('[amn]*', 'ammmna'));//true (a or m or n may come zero or more times) }} 
Test het nu

Regex-metatekens

De metatekens voor reguliere expressies werken als shortcodes.

RegexBeschrijving
.Elk teken (kan wel of niet overeenkomen met terminator)
DAlle cijfers, behalve [0-9]
DElk niet-cijferig, afkorting van [^0-9]
SElk witruimteteken, een afkorting van [ x0Bf ]
SElk teken dat geen witruimte bevat, een afkorting van [^s]
InElk woordteken, afkorting van [a-zA-Z_0-9]
INElk niet-woordteken, een afkorting van [^w]
BEen woordgrens
BEen niet-woordgrens

Voorbeeld van metatekens voor reguliere expressies

 import java.util.regex.*; class RegexExample5{ public static void main(String args[]){ System.out.println('metacharacters d....');\d means digit System.out.println(Pattern.matches('\d', 'abc'));//false (non-digit) System.out.println(Pattern.matches('\d', '1'));//true (digit and comes once) System.out.println(Pattern.matches('\d', '4443'));//false (digit but comes more than once) System.out.println(Pattern.matches('\d', '323abc'));//false (digit and char) System.out.println('metacharacters D....');\D means non-digit System.out.println(Pattern.matches('\D', 'abc'));//false (non-digit but comes more than once) System.out.println(Pattern.matches('\D', '1'));//false (digit) System.out.println(Pattern.matches('\D', '4443'));//false (digit) System.out.println(Pattern.matches('\D', '323abc'));//false (digit and char) System.out.println(Pattern.matches('\D', 'm'));//true (non-digit and comes once) System.out.println('metacharacters D with quantifier....'); System.out.println(Pattern.matches('\D*', 'mak'));//true (non-digit and may come 0 or more times) }} 
Test het nu

Reguliere expressie Vraag 1

 /*Create a regular expression that accepts alphanumeric characters only. Its length must be six characters long only.*/ import java.util.regex.*; class RegexExample6{ public static void main(String args[]){ System.out.println(Pattern.matches('[a-zA-Z0-9]{6}', 'arun32'));//true System.out.println(Pattern.matches('[a-zA-Z0-9]{6}', 'kkvarun32'));//false (more than 6 char) System.out.println(Pattern.matches('[a-zA-Z0-9]{6}', 'JA2Uk2'));//true System.out.println(Pattern.matches('[a-zA-Z0-9]{6}', 'arun$2'));//false ($ is not matched) }} 

Test het nu

Reguliere expressievraag 2

 /*Create a regular expression that accepts 10 digit numeric characters starting with 7, 8 or 9 only.*/ import java.util.regex.*; class RegexExample7{ public static void main(String args[]){ System.out.println('by character classes and quantifiers ...'); System.out.println(Pattern.matches('[789]{1}[0-9]{9}', '9953038949'));//true System.out.println(Pattern.matches('[789][0-9]{9}', '9953038949'));//true System.out.println(Pattern.matches('[789][0-9]{9}', '99530389490'));//false (11 characters) System.out.println(Pattern.matches('[789][0-9]{9}', '6953038949'));//false (starts from 6) System.out.println(Pattern.matches('[789][0-9]{9}', '8853038949'));//true System.out.println('by metacharacters ...'); System.out.println(Pattern.matches('[789]{1}\d{9}', '8853038949'));//true System.out.println(Pattern.matches('[789]{1}\d{9}', '3853038949'));//false (starts from 3) }} 
Test het nu

Voorbeeld van Java Regex Finder

 import java.util.regex.Pattern; import java.util.Scanner; import java.util.regex.Matcher; public class RegexExample8{ public static void main(String[] args){ Scanner sc=new Scanner(System.in); while (true) { System.out.println('Enter regex pattern:'); Pattern pattern = Pattern.compile(sc.nextLine()); System.out.println('Enter text:'); Matcher matcher = pattern.matcher(sc.nextLine()); boolean found = false; while (matcher.find()) { System.out.println('I found the text '+matcher.group()+' starting at index '+ matcher.start()+' and ending at index '+matcher.end()); found = true; } if(!found){ System.out.println('No match found.'); } } } } 

Uitgang:

 Enter regex pattern: java Enter text: this is java, do you know java I found the text java starting at index 8 and ending at index 12 I found the text java starting at index 26 and ending at index 30