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.
- Interfície MatchResult
- Classe de Match
- Classe de patró
- Classe PatternSyntaxException
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ètode | Descripció |
---|---|---|
1 | coincidències booleanes () | prova si l'expressió regular coincideix amb el patró. |
2 | cerca booleana () | troba la següent expressió que coincideix amb el patró. |
3 | cerca booleana (inici int) | troba la següent expressió que coincideix amb el patró del número inicial donat. |
4 | Grup de cadenes () | retorna la subseqüència coincident. |
5 | int start() | retorna l'índex inicial de la subseqüència coincident. |
6 | int final () | retorna l'índex final de la subseqüència coincident. |
7 | int 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ètode | Descripció |
---|---|---|
1 | Compilació de patró estàtic (String regex) | compila l'expressió regular donada i retorna la instància del Patró. |
2 | Coincidència de concordança (entrada de CharSequence) | crea una concordança que coincideix amb l'entrada donada amb el patró. |
3 | Coincidè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ó. |
4 | String[] split (entrada de CharSequence) | divideix la cadena d'entrada donada al voltant de les coincidències del patró donat. |
5 | Patró 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àcter | Descripció |
---|---|---|
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.
Regex | Descripció |
---|---|
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.
Regex | Descripció |
---|---|
. | Qualsevol caràcter (pot coincidir o no amb el terminador) |
d | Qualsevol dígit, menys de [0-9] |
D | Qualsevol que no sigui dígit, abreviatura de [^0-9] |
s | Qualsevol caràcter d'espai en blanc, abreviatura de [ x0Bf ] |
S | Qualsevol caràcter que no sigui espai en blanc, abreviatura de [^s] |
En | Qualsevol caràcter de paraula, abreviatura de [a-zA-Z_0-9] |
IN | Qualsevol caràcter que no sigui una paraula, abreviatura de [^w] |
Un límit de paraula | |
B | Un 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