Java Regex

Java Regex

The Java Regex nebo Regulární výraz je API pro definovat vzor pro vyhledávání nebo manipulaci s řetězci .

Je široce používán k definování omezení řetězců, jako je ověření hesla a e-mailu. Poté, co se naučíte tutoriál Java regex, budete moci otestovat své regulární výrazy pomocí nástroje Java Regex Tester Tool.

Java Regex API poskytuje 1 rozhraní a 3 třídy java.util.regex balík.

balíček java.util.regex

Třídy Matcher a Pattern poskytují možnost regulárního výrazu Java. Balíček java.util.regex poskytuje následující třídy a rozhraní pro regulární výrazy.

  1. Rozhraní MatchResult
  2. Třída dohazovačů
  3. Třída vzoru
  4. Třída PatternSyntaxException
Java Regex API

Třída dohazovačů

Implementuje Výsledek zápasu rozhraní. Je to a motor regulárního výrazu který se používá k provádění operací shody na posloupnosti znaků.

Ne. Metoda Popis
1 booleovské shody() otestujte, zda regulární výraz odpovídá vzoru.
2 boolean find() najde další výraz, který odpovídá vzoru.
3 boolean find (int start) najde další výraz, který odpovídá vzoru z daného počátečního čísla.
4 Skupina řetězců() vrátí odpovídající subsekvenci.
5 int start() vrátí počáteční index odpovídající podsekvence.
6 zamýšlet() vrátí koncový index odpovídající podsekvence.
7 int groupCount() vrátí celkový počet odpovídající podsekvence.

Třída vzoru

to je kompilovaná verze regulárního výrazu . Používá se k definování vzoru pro motor regulárních výrazů.

Ne. Metoda Popis
1 kompilace statického vzoru (regulární výraz řetězce) zkompiluje daný regulární výraz a vrátí instanci vzoru.
2 Matcher matcher (vstup CharSequence) vytvoří párovač, který odpovídá danému vstupu vzoru.
3 statické booleovské shody (regulární výraz řetězce, vstup znakové sekvence) Funguje jako kombinace metod kompilace a porovnávání. Zkompiluje regulární výraz a porovná daný vstup se vzorem.
4 String[] split (vstup znakové sekvence) rozdělí daný vstupní řetězec kolem shod daného vzoru.
5 Vzor řetězce() vrátí vzor regulárního výrazu.

Příklad regulárních výrazů Java

Existují tři způsoby, jak napsat příklad regulárního výrazu v Javě.

 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); }}  
Otestujte to hned

Výstup

 true true true  

Regulární výraz. Příklad

. (tečka) představuje 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) }}  
Otestujte to hned

Regex Třídy znaků

Ne. Třída postavy Popis
1 [abc] a, b nebo c (jednoduchá třída)
2 [^abc] Jakýkoli znak kromě a, b nebo c (negace)
3 [a-zA-Z] a až z nebo A až Z, včetně (rozsah)
4 [a-d[m-p]] a až d nebo m až p: [a-dm-p] (spojení)
5 [a-z&&[def]] d, e nebo f (průsečík)
6 [a-z&&[^bc]] a až z, kromě b a c: [ad-z] (odčítání)
7 [a-z&&[^m-p]] a až z, a ne m až p: [a-lq-z] (odčítání)

Regulární výraz Třídy znaků Pří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) }}  
Otestujte to hned

Kvantifikátory regulárního výrazu

Kvantifikátory určují počet výskytů znaku.

Regex Popis
X? X se vyskytuje jednou nebo vůbec
X+ X se vyskytuje jednou nebo vícekrát
X* X se vyskytuje nula nebo vícekrát
X{n} X se vyskytuje pouze nkrát
X{n,} X se vyskytuje n nebo vícekrát
X{y,z} X se vyskytuje alespoň ykrát, ale méně než zkrát

Příklad tříd znaků a kvantifikátorů regulárních výrazů

 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) }}  
Otestujte to hned

Regex metaznaky

Metaznaky regulárního výrazu fungují jako krátké kódy.

Regex Popis
. Libovolný znak (může nebo nemusí odpovídat terminátoru)
d Libovolné číslice, kromě [0-9]
D Libovolné jiné než číslice, zkratka [^0-9]
s Jakýkoli znak mezery, zkratka pro [ x0Bf ]
S Jakýkoli znak bez mezer, zkratka pro [^s]
V Libovolný znak slova, zkratka [a-zA-Z_0-9]
V Libovolný neslovný znak, zkratka [^w]
 Hranice slova
B Hranice bez slova

Příklad metaznaků regulárních výrazů

 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) }}  
Otestujte to hned

Regulární výraz otázka 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) }}  

Otestujte to hned

Regulární výraz otázka 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) }}  
Otestujte to hned

Pří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ýstup:

 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