Java Regex - szybki przewodnik

Java udostępnia pakiet java.util.regex do dopasowywania wzorców za pomocą wyrażeń regularnych. Wyrażenia regularne Java są bardzo podobne do języka programowania Perl i bardzo łatwe do nauczenia.

Wyrażenie regularne to specjalna sekwencja znaków, która pomaga dopasować lub znaleźć inne ciągi lub zestawy ciągów przy użyciu specjalistycznej składni przechowywanej we wzorcu. Można ich używać do wyszukiwania, edycji lub manipulowania tekstem i danymi.

Pakiet java.util.regex składa się głównie z następujących trzech klas -

  • Pattern Class- Obiekt Pattern jest skompilowaną reprezentacją wyrażenia regularnego. Klasa Pattern nie udostępnia żadnych publicznych konstruktorów. Aby utworzyć wzorzec, musisz najpierw wywołać jeden z jego publicznych statycznychcompile()metody, które następnie zwrócą obiekt Pattern. Te metody akceptują wyrażenie regularne jako pierwszy argument.

  • Matcher Class- Obiekt Matcher to silnik, który interpretuje wzorzec i wykonuje operacje dopasowywania względem ciągu wejściowego. Podobnie jak klasa Pattern, Matcher nie definiuje żadnych publicznych konstruktorów. Otrzymujesz obiekt Matcher, wywołującmatcher() na obiekcie Pattern.

  • PatternSyntaxException - Obiekt PatternSyntaxException jest niezaznaczonym wyjątkiem, który wskazuje błąd składni we wzorcu wyrażenia regularnego.

Przechwytywanie grup to sposób na traktowanie wielu postaci jako jednej jednostki. Tworzy się je poprzez umieszczenie znaków, które mają być zgrupowane, w nawiasach. Na przykład wyrażenie regularne (pies) tworzy pojedynczą grupę zawierającą litery „d”, „o” i „g”.

Grupy przechwytywania są numerowane, licząc ich nawiasy otwierające od lewej do prawej. Na przykład w wyrażeniu ((A) (B (C))) są cztery takie grupy -

  • ((A)(B(C)))
  • (A)
  • (B(C))
  • (C)

Aby dowiedzieć się, ile grup jest obecnych w wyrażeniu, wywołaj metodę groupCount na obiekcie dopasowującym. Metoda groupCount zwraca plikint pokazująca liczbę grup przechwytujących obecnych we wzorcu dopasowania.

Istnieje również grupa specjalna, grupa 0, która zawsze reprezentuje całe wyrażenie. Ta grupa nie jest uwzględniona w łącznej kwocie zgłaszanej przez groupCount.

Przykład

Poniższy przykład ilustruje, jak znaleźć ciąg cyfr z podanego ciągu alfanumerycznego -

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexMatches {
   public static void main( String args[] ) {
      // String to be scanned to find the pattern.
      String line = "This order was placed for QT3000! OK?";
      String pattern = "(.*)(\\d+)(.*)";

      // Create a Pattern object
      Pattern r = Pattern.compile(pattern);

      // Now create matcher object.
      Matcher m = r.matcher(line);
      
      if (m.find( )) {
         System.out.println("Found value: " + m.group(0) );
         System.out.println("Found value: " + m.group(1) );
         System.out.println("Found value: " + m.group(2) );
      } else {
         System.out.println("NO MATCH");
      }
   }
}

To da następujący wynik -

Wynik

Found value: This order was placed for QT3000! OK?
Found value: This order was placed for QT300
Found value: 0

Wprowadzenie

Plik java.util.regex.MatchResultinterfejs reprezentuje wynik operacji dopasowania. Ten interfejs zawiera metody zapytań używane do określania wyników dopasowania względem wyrażenia regularnego. Granice dopasowania, grupy i granice grup można zobaczyć, ale nie można ich modyfikować za pomocą MatchResult.

Deklaracja interfejsu

Poniżej znajduje się deklaracja dla java.util.regex.MatchResult interfejs -

public interface MatchResult

Metody interfejsu

Sr.No Metoda i opis
1 int end ()

Zwraca przesunięcie po ostatnim dopasowanym znaku.

2 int end (grupa int)

Zwraca przesunięcie po ostatnim znaku podciągu przechwyconym przez daną grupę podczas tego dopasowania.

3 Grupa ciągów ()

Zwraca podciąg wejściowy dopasowany przez poprzednie dopasowanie.

4 Grupa ciągów (grupa int)

Zwraca podciąg wejściowy przechwycony przez daną grupę podczas poprzedniej operacji dopasowania.

5 int groupCount ()

Zwraca liczbę grup przechwytywania we wzorcu tego wyniku dopasowania.

6 int start ()

Zwraca indeks początkowy dopasowania.

7 int start (grupa int)

Zwraca indeks początkowy podciągu przechwyconego przez daną grupę podczas tego dopasowania.

Wprowadzenie

Plik java.util.regex.Pattern class reprezentuje skompilowaną reprezentację wyrażenia regularnego.

Deklaracja klasy

Poniżej znajduje się deklaracja dla java.util.regex.Pattern klasa -

public final class Pattern
   extends Object
      implements Serializable

Pole

Poniżej znajdują się pola dla java.util.regex.Duration klasa -

  • static int CANON_EQ - Włącza równoważność kanoniczną.

  • static int CASE_INSENSITIVE - Włącza dopasowywanie bez rozróżniania wielkości liter.

  • static int COMMENTS - Zezwala na spacje i komentarze we wzorcu.

  • static int DOTALL - Włącza tryb dotall.

  • static int LITERAL - Włącza dosłowne analizowanie wzorca.

  • static int MULTILINE - Włącza tryb wielowierszowy.

  • static int UNICODE_CASE - Umożliwia składanie obudowy z obsługą Unicode.

  • static int UNICODE_CHARACTER_CLASS - Włącza wersję Unicode predefiniowanych klas znaków i klas znaków POSIX.

  • static int UNIX_LINES - Włącza tryb linii Unix.

Metody klasowe

Sr.No Metoda i opis
1 statyczna kompilacja wzorca (wyrażenie regularne String)

Kompiluje dane wyrażenie regularne do wzorca.

2 statyczna kompilacja wzorca (ciąg wyrażeń regularnych, flagi int)

Kompiluje dane wyrażenie regularne do wzorca z podanymi flagami.

3 flagi int ()

Zwraca flagi dopasowania tego wzorca.

4 Dopasowanie dopasowania (dane wejściowe CharSequence)

Tworzy element dopasowujący, który dopasuje dane wejście do tego wzorca.

5 statyczne dopasowania boolowskie (ciąg regex, wejście CharSequence)

Kompiluje dane wyrażenie regularne i próbuje dopasować do niego podane dane wejściowe.

6 Wzór ciągu ()

Zwraca wyrażenie regularne, z którego został skompilowany ten wzorzec.

7 statyczny cytat typu String (ciąg znaków)

Zwraca wzorzec literału String dla określonego String.

8 String [] split (dane wejściowe CharSequence)

Dzieli podaną sekwencję wejściową wokół dopasowań tego wzorca.

9 String [] split (wejście CharSequence, limit int)

Dzieli podaną sekwencję wejściową wokół dopasowań tego wzorca.

10 Ciąg toString ()

Zwraca ciąg znaków reprezentujący ten wzorzec.

Dziedziczone metody

Ta klasa dziedziczy metody z następujących klas -

  • Java.lang.Object

Wprowadzenie

Plik java.util.regex.Matcher działa jak silnik, który wykonuje operacje dopasowywania na sekwencji znaków, interpretując Pattern.

Deklaracja klasy

Poniżej znajduje się deklaracja dla java.util.regex.Matcher klasa -

public final class Matcher
   extends Object
      implements MatchResult

Metody klasowe

Sr.No Metoda i opis
1 Matcher appendReplacement (StringBuffer sb, zamiana ciągu)

Implementuje nieterminalowy krok dołączania i zamieniania.

2 StringBuffer appendTail (StringBuffer sb)

Implementuje krok dołączania i zastępowania terminala.

3 int end ()

Zwraca przesunięcie po ostatnim dopasowanym znaku.

4 int end (grupa int)

Zwraca przesunięcie po ostatnim znaku podciągu przechwyconym przez daną grupę podczas poprzedniej operacji dopasowania.

5 boolean find ()

Próbuje znaleźć następny podciąg sekwencji wejściowej, który pasuje do wzorca.

6 boolean find (int start)

Resetuje ten element dopasowujący, a następnie próbuje znaleźć następny podciąg sekwencji wejściowej pasującej do wzorca, zaczynając od określonego indeksu.

7 Grupa ciągów ()

Zwraca podciąg wejściowy przechwycony przez daną grupę podczas poprzedniej operacji dopasowania.

8 Grupa ciągów (nazwa ciągu)

Zwraca podciąg wejściowy przechwycony przez daną nazwaną grupę przechwytywania podczas poprzedniej operacji dopasowania.

9 int groupCount ()

Zwraca liczbę grup przechwytywania we wzorcu tego dopasowania.

10 boolean hasAnchoringBounds ()

Pyta o zakotwiczenie granic regionu dla tego dopasowania.

11 boolean hasTransparentBounds ()

Pyta o przezroczystość granic regionu dla tego dopasowania.

12 boolean hitEnd ()

Zwraca prawdę, jeśli koniec danych wejściowych został trafiony przez wyszukiwarkę w ostatniej operacji dopasowania wykonanej przez ten element dopasowujący.

13 boolean lookingAt ()

Próbuje dopasować sekwencję wejściową, zaczynając od początku regionu, względem wzorca.

14 dopasowania logiczne ()

Próbuje dopasować cały region do wzorca.

15 Wzór wzoru ()

Zwraca wzorzec, który jest interpretowany przez ten element dopasowujący.

16 static String quoteReplacement (String s)

Zwraca ciąg znaków zastępujący literał dla określonego ciągu.

17 Region dopasowania (int start, int end)

Ustawia limity regionu tego dopasowania.

18 int regionEnd ()

Podaje indeks końcowy (wyłączny) regionu tego dopasowania.

19 int regionStart ()

Podaje indeks początkowy regionu tego dopasowania.

20 String replaceAll (zamiana ciągu)

Zastępuje każdy podciąg sekwencji wejściowej, który pasuje do wzorca podanym ciągiem zastępującym.

21 String replaceFirst (wymiana ciągu)

Zastępuje pierwszy podciąg sekwencji wejściowej, która pasuje do wzorca podanym ciągiem zastępującym.

22 boolean requireEnd ()

Zwraca wartość „prawda”, jeśli więcej danych wejściowych mogłoby zmienić dopasowanie pozytywne na ujemne.

23 Reset dopasowania ()

Resetuje ten dopasowujący.

24 Reset dopasowania (dane wejściowe CharSequence)

Resetuje ten dopasowujący z nową sekwencją wejściową.

25 int start ()

Zwraca indeks początkowy poprzedniego dopasowania.

26 int start (grupa int)

Zwraca indeks początkowy podciągu przechwyconego przez daną grupę podczas poprzedniej operacji dopasowania.

27 MatchResult toMatchResult ()

Zwraca stan dopasowania tego dopasowania jako MatchResult.

28 Ciąg toString ()

Zwraca ciąg znaków reprezentujący ten element dopasowujący.

29 Matcher useAnchoringBounds (boolean b)

Ustawia zakotwiczenie granic regionu dla tego dopasowania.

30 Matcher usePattern (Pattern newPattern)

Zmienia wzorzec, którego ten element dopasowujący używa do znajdowania dopasowań.

31 Matcher useTransparentBounds (boolean b)

Ustawia przezroczystość granic regionu dla tego dopasowania.

Dziedziczone metody

Ta klasa dziedziczy metody z następujących klas -

  • Java.lang.Object

Wprowadzenie

Plik java.util.regex.PatternSyntaxException class reprezentuje niesprawdzony wyjątek zgłoszony w celu wskazania błędu składniowego we wzorcu wyrażenia regularnego.

Deklaracja klasy

Poniżej znajduje się deklaracja dla java.util.regex.PatternSyntaxException klasa -

public class PatternSyntaxException
   extends IllegalArgumentException

Konstruktorzy

Sr.No Metoda i opis
1 PatternSyntaxException(String desc, String regex, int index)

Konstruuje nowe wystąpienie tej klasy.

Metody klasowe

Sr.No Metoda i opis
1 String getDescription()

Pobiera opis błędu.

2 int getIndex()

Pobiera indeks błędu.

3 String getMessage()

Zwraca wielowierszowy ciąg zawierający opis błędu składniowego i jego indeksu, błędny wzorzec wyrażenia regularnego oraz wizualne wskazanie indeksu błędu we wzorcu.

4 String getPattern()

Pobiera błędny wzorzec wyrażenia regularnego.

Dziedziczone metody

Ta klasa dziedziczy metody z następujących klas -

  • Java.lang.Throwable
  • Java.lang.Object

Przykład

Poniższy przykład ilustruje użycie metod klasy java.util.regex.Pattern.PatternSyntaxException.

package com.tutorialspoint;

import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;

public class PatternSyntaxExceptionDemo {
   private static String REGEX = "[";
   private static String INPUT = "The dog says meow " + "All dogs say meow.";
   private static String REPLACE = "cat";

   public static void main(String[] args) {
      try{
         Pattern pattern = Pattern.compile(REGEX);
         
         // get a matcher object
         Matcher matcher = pattern.matcher(INPUT); 
         INPUT = matcher.replaceAll(REPLACE);
      } catch(PatternSyntaxException e){
         System.out.println("PatternSyntaxException: ");
         System.out.println("Description: "+ e.getDescription());
         System.out.println("Index: "+ e.getIndex());
         System.out.println("Message: "+ e.getMessage());
         System.out.println("Pattern: "+ e.getPattern());
      }
   }
}

Skompilujmy i uruchommy powyższy program, da to następujący wynik -

PatternSyntaxException: 
Description: Unclosed character class
Index: 0
Message: Unclosed character class near index 0
[
^
Pattern: [

Poniżej przedstawiono różne przykłady dopasowywania znaków przy użyciu wyrażeń regularnych w języku java.

Sr.No Konstrukcja i mecze
1 x

Znak x

2 \\

Znak odwrotnego ukośnika

3 \ 0n

Znak o wartości ósemkowej 0n (0 ≤ n ≤ 7)

4 \ 0nn

Znak o wartości ósemkowej 0nn (0 ≤ n ≤ 7)

5 \ 0mnn

Znak o wartości ósemkowej 0mnn (0 ≤ m ≤ 3, 0 ≤ n ≤ 7)

6 \ xhh

Znak o wartości szesnastkowej 0xhh

7 \ uhhhh

Znak o wartości szesnastkowej 0xhhhh

8 \ t

Znak tabulacji („\ u0009”)

9 \ n

Znak nowej linii (nowy wiersz) („\ u000A”)

10 \ r

Znak powrotu karetki („\ u000D”)

11 \fa

Znak kanału formularza („\ u000C”)

Poniżej przedstawiono różne przykłady dopasowywania klas znaków przy użyciu wyrażeń regularnych w java.

Sr.No Konstrukcja i mecze
1 [ABC]

a, b lub c (klasa prosta).

2 [^ abc]

Dowolny znak z wyjątkiem a, b lub c (negacja).

3 [a-zA-Z]

od a do z lub od A do Z, włącznie (zakres).

4 [reklama [mp]]

a do d lub m do p: [a-dm-p] (suma).

5 [az && [def]]

d, e lub f (przecięcie).

6 [az && [^ bc]]

a do z, z wyjątkiem b i c: [ad-z] (odejmowanie)

7 [az && [^ mp]]

od a do z, a nie od m do p: [a-lq-z] (odejmowanie).

Poniżej znajdują się różne przykłady dopasowywania predefiniowanych klas znaków przy użyciu wyrażeń regularnych w java.

Sr.No Konstrukcja i mecze
1 .

Dowolny znak (może, ale nie musi, pasować do terminatorów linii).

2 \re

Cyfra: [0–9].

3 \RE

Niecyfrowe: [^ 0-9].

4 \ s

Biały znak: [\ t \ n \ x0B \ f \ r]

5 \ S

Znak niebędący białymi znakami: [^ \ s].

6 \ w

Znak słowa: [a-zA-Z_0-9].

7 \ W

Znak niebędący słowem: [^ \ w]

Poniżej przedstawiono różne przykłady dopasowywania klas znaków POSIX przy użyciu wyrażeń regularnych w java.

Sr.No Konstrukcja i mecze
1 \ p {Dolna}

Mała litera alfabetu: [az].

2 \ p {Górna}

Znak alfabetu wielkiej litery: [AZ].

3 \ p {ASCII}

Wszystkie ASCII: [\ x00- \ x7F].

4 \ p {Alfa}

Znak alfabetyczny: [\ p {Dolny} \ p {Górny}].

5 \ p {Digit}

Cyfra dziesiętna: [0–9].

6 \ p {Alnum}

Znak alfanumeryczny: [\ p {alfa} \ p {cyfra}].

7 \ p {Punct}

Interpunkcja: jedna z! "# $% & '() * +, -. / :; <=>? @ [\] ^ _> {|} <.

8 \ p {Graph}

Widoczny znak: [\ p {Alnum} \ p {Punct}].

9 \ p {Drukuj}

Znak do wydrukowania: [\ p {Graph} \ x20].

10 \ p {Puste}

Spacja lub tabulator: [\ t].

11 \ p {XDigit}

Cyfra szesnastkowa: [0-9a-fA-F].

12 \ p {Spacja}

Biały znak: [\ t \ n \ x0B \ f \ r].

Poniżej przedstawiono różne przykłady dopasowywania klas znaków JAVA przy użyciu wyrażeń regularnych w języku java.

Sr.No Konstrukcja i mecze
1 \ p {javaLowerCase}

Odpowiednik java.lang.Character.isLowerCase ().

2 \ p {javaUpperCase}

Odpowiednik java.lang.Character.isUpperCase ().

3 \ p {javaWhitespace}

Odpowiednik java.lang.Character.isWhitespace ().

4 \ p {javaMirrored}

Odpowiednik java.lang.Character.isMirrored ().

Poniżej przedstawiono różne przykłady dopasowywania klas znaków Unicode przy użyciu wyrażeń regularnych w języku java.

Sr.No Konstrukcja i mecze
1 \ p {IsLatin}

Znak alfabetu łacińskiego.

2 \ p {InGreek}

Postać w bloku greckim.

3 \ p {Lu}

Wielka litera.

4 \ p {IsAlphabetic}

Znak alfabetyczny (właściwość binarna).

5 \ p {Sc}

Symbol waluty.

6 \ P {InGreek}

Dowolny znak z wyjątkiem jednego w bloku greckim.

7 [\ p {L} && [^ \ p {Lu}]]

Dowolna litera z wyjątkiem dużej litery.

Poniżej przedstawiono różne przykłady dopasowywania granic używających wyrażeń regularnych w java.

Sr.No Konstrukcja i mecze
1 ^

Początek wiersza.

2 $

Koniec linii.

3 \b

Granica słów.

4 \B

Granica bez słów.

5 \ZA

Początek wejścia.

6 \SOL

Koniec poprzedniego meczu.

7 \ Z

Koniec wejścia, ale dla końcowego terminatora, jeśli istnieje.

8 \ z

Koniec wejścia.

Chciwy kwantyfikator wskazuje wyszukiwarce przeszukanie całego ciągu i sprawdzenie, czy pasuje on do podanego wyrażenia regularnego. Poniżej przedstawiono różne przykłady Greedy Quantifiers używające wyrażeń regularnych w java.

Sr.No Konstrukcja i mecze
1 X?

X, raz lub wcale.

2 X *

X, zero lub więcej razy

3 X +

X, raz lub więcej razy.

4 X {n}

X, dokładnie n razy.

5 X {n,}

X, co najmniej n razy.

6 X {n, m}

X, co najmniej n, ale nie więcej niż m razy

Niechętny kwantyfikator wskazuje, że wyszukiwarka ma rozpocząć od najkrótszego możliwego fragmentu ciągu. Po znalezieniu dopasowania silnik działa dalej; w przeciwnym razie dodaje jeden znak do sekcji sprawdzanego łańcucha i przeszukuje go, i tak dalej. Ten proces trwa do momentu znalezienia dopasowania lub całkowitego wykorzystania całego ciągu. Poniżej przedstawiono różne przykłady niechętnych kwantyfikatorów używających wyrażeń regularnych w java.

Sr.No Konstrukcja i mecze
1 X ??

X, raz lub wcale.

2 X *?

X, zero lub więcej razy

3 X +?

X, raz lub więcej razy.

4 X {n}?

X, dokładnie n razy.

5 X {n,}?

X, co najmniej n razy.

6 X {n, m}?

X, co najmniej n, ale nie więcej niż m razy

Kwantyfikator zaborczy jest podobny do kwantyfikatora zachłannego. Wskazuje, że silnik ma wystartować, sprawdzając cały ciąg, różni się w tym sensie, że nie działa, jeśli dopasowanie się nie powiodło i nie ma odwrotu. Poniżej przedstawiono różne przykłady kwantyfikatorów dzierżawczych używających wyrażeń regularnych w java.

Sr.No Konstrukcja i mecze
1 X? +

X, raz lub wcale.

2 X * +

X, zero lub więcej razy

3 X ++

X, raz lub więcej razy.

4 X {n} +

X, dokładnie n razy.

5 X {n,} +

X, co najmniej n razy.

6 X {n, m} +

X, co najmniej n, ale nie więcej niż m razy

Poniżej przedstawiono różne przykłady operatorów logicznych używających wyrażeń regularnych w java.

Sr.No Konstrukcja i mecze
1 XY

X, po którym następuje Y.

2 X | Y

Albo X lub Y.

Wydrukować