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.
- MatchResult-grænseflade
- Matcher klasse
- Mønster klasse
- Klasse PatternSyntaxException
Matcher klasse
Den implementerer MatchResultat interface. Det er en regex motor som bruges til at udføre matchoperationer på en tegnsekvens.
Ingen. | Metode | Beskrivelse |
---|---|---|
1 | boolske kampe() | test, om det regulære udtryk matcher mønsteret. |
2 | boolsk fund() | finder det næste udtryk, der matcher mønsteret. |
3 | boolesk find (int start) | finder det næste udtryk, der matcher mønsteret fra det givne startnummer. |
4 | Strenggruppe() | returnerer den matchede efterfølger. |
5 | int start() | returnerer startindekset for den matchede efterfølger. |
6 | int end() | returnerer slutindekset for den matchede undersekvens. |
7 | int 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. | Metode | Beskrivelse |
---|---|---|
1 | statisk mønster kompilering (regex streng) | kompilerer det givne regex og returnerer forekomsten af mønsteret. |
2 | Matcher matcher (CharSequence input) | opretter en matcher, der matcher det givne input med mønsteret. |
3 | statiske 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. |
4 | String[] split(CharSequence input) | opdeler den givne inputstreng omkring overensstemmelser med et givet mønster. |
5 | Strengmø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. | Karakterklasse | Beskrivelse |
---|---|---|
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.
Regex | Beskrivelse |
---|---|
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.
Regex | Beskrivelse |
---|---|
. | Ethvert tegn (kan eller ikke matcher terminator) |
d | Alle cifre, kort end [0-9] |
D | Ethvert ikke-cifret, forkortelse for [^0-9] |
s | Ethvert blanktegn, forkortelse for [ x0Bf ] |
S | Ethvert ikke-mellemrum, forkortelse for [^s] |
I | Ethvert ordtegn, forkortelse for [a-zA-Z_0-9] |
I | Ethvert ikke-ord-tegn, forkortelse for [^w] |
En ordgrænse | |
B | En 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