logo

Java Regex

The Java Regex alebo Regulárny výraz je API pre definovať vzor na vyhľadávanie alebo manipuláciu s reťazcami .

Je široko používaný na definovanie obmedzenia reťazcov, ako je overenie hesla a e-mailu. Po preštudovaní Java regex tutoriálu budete môcť otestovať svoje regulárne výrazy pomocou Java Regex Tester Tool.

Java Regex API poskytuje 1 rozhranie a 3 triedy java.util.regex balík.

balík java.util.regex

Triedy Matcher a Pattern poskytujú možnosť regulárneho výrazu Java. Balík java.util.regex poskytuje nasledujúce triedy a rozhrania pre regulárne výrazy.

  1. Rozhranie MatchResult
  2. Trieda dohadzovačov
  3. Trieda vzorov
  4. Trieda PatternSyntaxException
Java Regex API

Trieda dohadzovačov

Implementuje Výsledok zápasu rozhranie. Je to a motor regulárneho výrazu ktorý sa používa na vykonávanie operácií zhody v sekvencii znakov.

NieMetódaPopis
1boolovské zhody()otestujte, či sa regulárny výraz zhoduje so vzorom.
2boolovské nájsť ()nájde ďalší výraz, ktorý zodpovedá vzoru.
3boolean find (int start)nájde ďalší výraz, ktorý sa zhoduje so vzorom z daného počiatočného čísla.
4Skupina reťazcov ()vráti zhodnú podsekvenciu.
5int start()vráti počiatočný index zhodnej podsekvencie.
6int end()vráti koncový index zhodnej podsekvencie.
7int groupCount()vráti celkový počet zhodných podsekvencií.

Trieda vzorov

To je kompilovaná verzia regulárneho výrazu . Používa sa na definovanie vzoru pre motor regulárneho výrazu.

NieMetódaPopis
1statická kompilácia vzoru (regulárny výraz reťazca)skompiluje daný regulárny výraz a vráti inštanciu vzoru.
2Matcher matcher (vstup CharSequence)vytvorí zhodovač, ktorý priradí daný vstup k vzoru.
3statické boolovské zhody (regulárny výraz reťazca, vstup CharSequence)Funguje ako kombinácia metód kompilácie a porovnávania. Skompiluje regulárny výraz a priradí daný vstup k vzoru.
4Rozdelenie reťazca[] (vstup sekvencie znakov)rozdelí daný vstupný reťazec okolo zhôd daného vzoru.
5Vzor reťazca()vráti vzor regulárneho výrazu.

Príklad regulárnych výrazov Java

Existujú tri spôsoby, ako napísať príklad regulárneho výrazu v jazyku 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); }} 
Vyskúšajte to

Výkon

 true true true 

Regulárny výraz. Príklad

. (bodka) predstavuje jeden znak.

 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) }} 
Vyskúšajte to

Regex triedy znakov

NieTrieda postavyPopis
1[abc]a, b alebo c (jednoduchá trieda)
2[^abc]Akýkoľvek znak okrem a, b alebo c (zápor)
3[a-zA-Z]a až z alebo A až Z vrátane (rozsah)
4[a-d[m-p]]a až d alebo m až p: [a-dm-p] (spojenie)
5[a-z&&[def]]d, e alebo f (priesečník)
6[a-z&&[^bc]]a až z, okrem b a c: [ad-z] (odčítanie)
7[a-z&&[^m-p]]a až z, a nie m až p: [a-lq-z] (odčítanie)

Regulárny výraz Triedy znakov Príklad

 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) }} 
Vyskúšajte to

Kvantifikátory regulárneho výrazu

Kvantifikátory špecifikujú počet výskytov znaku.

RegexPopis
X?X sa vyskytuje raz alebo vôbec
X+X sa vyskytuje raz alebo viackrát
X*X sa vyskytuje nula alebo viackrát
X{n}X sa vyskytuje iba n-krát
X{n,}X sa vyskytuje n alebo viackrát
X{y,z}X sa vyskytuje aspoň y-krát, ale menej ako z-krát

Príklady tried znakov a kvantifikátorov regulárneho výrazu

 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) }} 
Vyskúšajte to

Metaznaky regulárneho výrazu

Metaznaky regulárneho výrazu fungujú ako krátke kódy.

RegexPopis
.Akýkoľvek znak (môže alebo nemusí zodpovedať terminátoru)
dAkékoľvek číslice okrem [0-9]
DAkékoľvek iné ako číslice, skratka pre [^0-9]
sAkýkoľvek znak medzery, skratka pre [ x0Bf ]
SAkýkoľvek znak bez medzier, skratka pre [^s]
InĽubovoľný znak slova, skratka pre [a-zA-Z_0-9]
INAkýkoľvek neslovný znak, skratka pre [^w]
Hranica slova
BHranica bez slova

Príklad metaznakov regulárneho výrazu

 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) }} 
Vyskúšajte to

Otázka na regulárny výraz 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) }} 

Vyskúšajte to

Otázka na regulárny výraz 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) }} 
Vyskúšajte to

Príklad 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.'); } } } } 

Výkon:

 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