logo

Java Regex

Det Java Regex eller Regular Expression er en API til definere et mønster til at søge eller manipulere strenge .

Det er meget brugt til at definere begrænsningen på strenge såsom adgangskode og e-mail-validering. Efter at have lært Java regex tutorial, vil du være i stand til at teste dine regulære udtryk ved hjælp af Java Regex Tester Tool.

Java Regex API giver 1 interface og 3 klasser i java.util.regex pakke.

java.util.regex-pakke

Matcher- og Pattern-klasserne giver mulighed for Java regulære udtryk. Java.util.regex-pakken giver følgende klasser og grænseflader til regulære udtryk.

  1. MatchResult-grænseflade
  2. Matcher klasse
  3. Mønster klasse
  4. Klasse PatternSyntaxException
Java Regex API

Matcher klasse

Den implementerer MatchResultat interface. Det er en regex motor som bruges til at udføre matchoperationer på en tegnsekvens.

Ingen.MetodeBeskrivelse
1boolske kampe()test, om det regulære udtryk matcher mønsteret.
2boolsk fund()finder det næste udtryk, der matcher mønsteret.
3boolesk find (int start)finder det næste udtryk, der matcher mønsteret fra det givne startnummer.
4Strenggruppe()returnerer den matchede efterfølger.
5int start()returnerer startindekset for den matchede efterfølger.
6int end()returnerer slutindekset for den matchede undersekvens.
7int groupCount()returnerer det samlede antal af den matchede undersekvens.

Mønster klasse

Det er kompileret version af et regulært udtryk . Det bruges til at definere et mønster for regex-motoren.

Ingen.MetodeBeskrivelse
1statisk mønster kompilering (regex streng)kompilerer det givne regex og returnerer forekomsten af ​​mønsteret.
2Matcher matcher (CharSequence input)opretter en matcher, der matcher det givne input med mønsteret.
3statiske boolean-matches (regex streng, CharSequence input)Det fungerer som en kombination af kompilering og matcher metoder. Det kompilerer det regulære udtryk og matcher det givne input med mønsteret.
4String[] split(CharSequence input)opdeler den givne inputstreng omkring overensstemmelser med et givet mønster.
5Strengmønster()returnerer det regex-mønster.

Eksempel på regulære Java-udtryk

Der er tre måder at skrive regex-eksemplet på i 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); }} 
Test det nu

Produktion

 true true true 

Almindelig udtryk . Eksempel

Det . (punktum) repræsenterer et enkelt tegn.

 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 det nu

Regex-karakterklasser

Ingen.KarakterklasseBeskrivelse
1[abc]a, b eller c (simpel klasse)
2[^abc]Ethvert tegn undtagen a, b eller c (negation)
3[a-zA-Z]a til z eller A til Z, inklusive (interval)
4[a-d[m-p]]a gennem d, eller m gennem p: [a-dm-p] (forening)
5[a-z&&[def]]d, e eller f (kryds)
6[a-z&&[^bc]]a til z, undtagen b og c: [ad-z] (subtraktion)
7[a-z&&[^m-p]]a til z, og ikke m gennem p: [a-lq-z](subtraktion)

Regulære udtryk Karakterklasser Eksempel

 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 det nu

Regex kvantifikatorer

Kvantifikatorerne angiver antallet af forekomster af et tegn.

RegexBeskrivelse
X?X forekommer én gang eller slet ikke
X+X forekommer én eller flere gange
X*X forekommer nul eller flere gange
X{n}X forekommer kun n gange
X{n,}X forekommer n eller flere gange
X{y,z}X forekommer mindst y gange, men mindre end z gange

Regulære udtryk Karakterklasser og kvantificerende eksempel

 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 det nu

Regex metakarakterer

Det regulære udtryks metategn fungerer som kortkoder.

RegexBeskrivelse
.Ethvert tegn (kan eller ikke matcher terminator)
dAlle cifre, kort end [0-9]
DEthvert ikke-cifret, forkortelse for [^0-9]
sEthvert blanktegn, forkortelse for [ x0Bf ]
SEthvert ikke-mellemrum, forkortelse for [^s]
IEthvert ordtegn, forkortelse for [a-zA-Z_0-9]
IEthvert ikke-ord-tegn, forkortelse for [^w]
En ordgrænse
BEn ikke-ordgrænse

Eksempel på regulære udtryksmetakarakterer

 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 det nu

Regulære udtryksspørgsmål 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 det nu

Regulære udtryk spørgsmål 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 det nu

Eksempel på 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.'); } } } } 

Produktion:

 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