logo

Java Regex

El Java Regex o Regular Expression és una API per definir un patró per cercar o manipular cadenes .

S'utilitza àmpliament per definir la restricció de cadenes com ara la validació de contrasenyes i correu electrònic. Després d'aprendre el tutorial de Java Regex, podreu provar les vostres expressions regulars amb l'eina Java Regex Tester.

L'API Java Regex proporciona 1 interfície i 3 classes java.util.regex paquet.

paquet java.util.regex

Les classes Matcher i Pattern proporcionen la facilitat d'expressió regular de Java. El paquet java.util.regex proporciona les classes i interfícies següents per a expressions regulars.

  1. Interfície MatchResult
  2. Classe de Match
  3. Classe de patró
  4. Classe PatternSyntaxException
API de Java Regex

Classe de Match

Implementa el MatchResult interfície. És un motor d'expressió regular que s'utilitza per realitzar operacions de concordança en una seqüència de caràcters.

No.MètodeDescripció
1coincidències booleanes ()prova si l'expressió regular coincideix amb el patró.
2cerca booleana ()troba la següent expressió que coincideix amb el patró.
3cerca booleana (inici int)troba la següent expressió que coincideix amb el patró del número inicial donat.
4Grup de cadenes ()retorna la subseqüència coincident.
5int start()retorna l'índex inicial de la subseqüència coincident.
6int final ()retorna l'índex final de la subseqüència coincident.
7int groupCount()retorna el nombre total de la subseqüència coincident.

Classe de patró

Això és el versió compilada d'una expressió regular . S'utilitza per definir un patró per al motor d'expressió regular.

No.MètodeDescripció
1Compilació de patró estàtic (String regex)compila l'expressió regular donada i retorna la instància del Patró.
2Coincidència de concordança (entrada de CharSequence)crea una concordança que coincideix amb l'entrada donada amb el patró.
3Coincidències booleanes estàtiques (String regex, entrada CharSequence)Funciona com la combinació de mètodes de compilació i de comparació. Compila l'expressió regular i fa coincidir l'entrada donada amb el patró.
4String[] split (entrada de CharSequence)divideix la cadena d'entrada donada al voltant de les coincidències del patró donat.
5Patró de cadena ()retorna el patró d'expressió regular.

Exemple d'expressions regulars Java

Hi ha tres maneres d'escriure l'exemple de regex a Java.

 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); }} 
Prova-ho ara

Sortida

 true true true 

Expressió normal . Exemple

El . (punt) representa un sol caràcter.

 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) }} 
Prova-ho ara

Classes de caràcters Regex

No.Classe de caràcterDescripció
1[abc]a, b o c (classe simple)
2[^abc]Qualsevol caràcter excepte a, b o c (negació)
3[a-zA-Z]de la a a la z o de la A a la Z, inclosos (interval)
4[a-d[m-p]]a a d, o m a p: [a-dm-p] (unió)
5[a-z&&[def]]d, e o f (intersecció)
6[a-z&&[^bc]]de la a a la z, excepte per a b i c: [ad-z] (resta)
7[a-z&&[^m-p]]de a a z, i no de m a p: [a-lq-z](resta)

Expressió regular Classes de caràcters Exemple

 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) }} 
Prova-ho ara

Quantificadors de regex

Els quantificadors especifiquen el nombre d'ocurrències d'un caràcter.

RegexDescripció
X?X apareix una vegada o no es produeix
X+X apareix una o més vegades
X*X es produeix zero o més vegades
X{n}X només apareix n vegades
X{n,}X es produeix n o més vegades
X{y,z}X es produeix almenys y vegades però menys de z vegades

Classes de caràcters d'expressió regular i exemple de quantificadors

 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) }} 
Prova-ho ara

Metacaracters de regex

Els metacaràcters de l'expressió regular funcionen com a codis curts.

RegexDescripció
.Qualsevol caràcter (pot coincidir o no amb el terminador)
dQualsevol dígit, menys de [0-9]
DQualsevol que no sigui dígit, abreviatura de [^0-9]
sQualsevol caràcter d'espai en blanc, abreviatura de [ x0Bf ]
SQualsevol caràcter que no sigui espai en blanc, abreviatura de [^s]
EnQualsevol caràcter de paraula, abreviatura de [a-zA-Z_0-9]
INQualsevol caràcter que no sigui una paraula, abreviatura de [^w]
Un límit de paraula
BUn límit sense paraules

Exemple de metacaràcters d'expressió regular

 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) }} 
Prova-ho ara

Pregunta d'expressió regular 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) }} 

Prova-ho ara

Pregunta d'expressió regular 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) }} 
Prova-ho ara

Exemple de 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.'); } } } } 

Sortida:

 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