JavaRush /Blog Java /Random-PL /Wyrażenia regularne w Javie
terranum
Poziom 28
Milan

Wyrażenia regularne w Javie

Opublikowano w grupie Random-PL
RegExWyrażenie regularne to rodzaj wzorca, który można zastosować do tekstu (String w Javie). Java udostępnia pakiet java.util.regex do dopasowywania wyrażeń regularnych. Wyrażenia regularne są bardzo podobne do języka programowania Perl i są bardzo łatwe do nauczenia. Wyrażenie regularne albo pasuje do tekstu (jego części), albo nie. * Jeśli wyrażenie regularne pasuje do fragmentu tekstu, możemy go znaleźć. ** Jeśli wyrażenie regularne jest złożone, możemy łatwo ustalić, która część wyrażenia regularnego pasuje do której części tekstu.

Pierwszy przykład

Wyrażenie regularne „ [a-z] +” dopasowuje wszystkie małe litery w tekście. [a-z]oznacza dowolny znak od ado zwłącznie i +oznacza „jeden lub więcej” znaków. Załóżmy, że podajemy ciąg „Code 2 Learn Java tutorial”. Jak to zrobić w Javie Najpierw musisz utworzyć szablon:
import java.util.regex.*;
Pattern p = Pattern.compile([a-z]+);
Następnie musisz utworzyć matchertekst, wysyłając wiadomość na diagramie:
Matcher m = p.matcher(“code 2 learn java tutorial”);
UWAGA: Nie mamy też konstruktorów Pattern, Matchertworzymy je za pomocą metod klasowych Pattern. Pattern Class:Obiekt klasy stanowi reprezentację wyrażenia regularnego. Klasa Pattern nie udostępnia żadnych konstruktorów publicznych. Aby utworzyć szablon należy najpierw wywołać jedną z publicznych metod statycznych, które następnie zwrócą obiekt klasy Pattern. Metody te przyjmują jako argument wyrażenie regularne. Matcher Class:Obiekt Finder to silnik interpretujący wzorzec i wykonujący operacje dopasowujące na ciągu wejściowym. Podobnie jak Patternklasa, Matchernie ma publicznych konstruktorów. Obiekt otrzymujesz Matcherpoprzez wywołanie metody matcherna obiekcie klasy Pattern. Kiedy już wykonaliśmy te kroki i mamy instancję klasy Matcher m , możemy teraz sprawdzić, czy wzorzec został znaleziony, a jeśli tak, to w jakiej pozycji itp. m.matches()zwraca wartość true, jeśli wzorzec pasuje do całego ciągu, w przeciwnym razie zwraca wartość false. m.lookingAt()zwraca wartość true, jeśli wzorzec pasuje do początku łańcucha, w przeciwnym razie zwraca wartość false. m.find ()zwraca wartość true, jeśli wzorzec pasuje do dowolnej części tekstu.

Znalezienie dopasowania

Po pomyślnym dopasowaniu m.start() zwróci indeks pierwszego dopasowanego znaku, a m.end() zwróci indeks ostatniego dopasowanego znaku plus jeden. Jeśli podjęto nieudaną próbę i nie znaleziono żadnego dopasowania , m.start()rzucająm.end()IllegalStateException
  • Dzięki temu RuntimeExceptionnie musisz go łapać.
m.end()Zwracanie indeksu ostatniego dopasowanego znaku plus jeden może wydawać się dziwne , ale właśnie tak jest w większości przypadków String.
  • Na przykład,“Now is the time“.substring(m.start(), m.end())
zwróci ten sam ciąg. Rzućmy okiem na kod:
import java.util.regex.*;

public class RegexTest {
    public static void main(String args[]) {
        String pattern = "[a-z]+";
        String text = "code 2 learn java tutorial";
        Pattern p = Pattern.compile(pattern);
        Matcher m = p.matcher(text);
        while(m.find()) {
            System.out.print(text.substring(m.start(), m.end()) + "*");
        }
    }
}
Output: code*learn*java*tutorial*

Dodatkowe metody

Jeśli istnieje dopasowanie, to:
  • m.replaceFirst(replacement)zwraca nowy ciąg, na który zostanie zastąpiony pierwszy podciąg pasujący do wzorcareplacement
  • m.replaceAll(replacement)zwraca nowy ciąg, w którym każdy podciąg pasujący do wzorca zostanie zastąpiony
  • m.find(StartIndex)znajdź następne dopasowanie, zaczynając od określonego indeksu
  • m.reset()resetuje szablon
  • m.reset(NewText)resetuje Findera i nadaje mu nowy tekst (być Stringmoże StringBufferlub CharBuffer)

Składnia wyrażeń regularnych

  • ^Dopasowuje początek linii.
  • $Dopasowuje koniec ciągu.
  • .Dopasowuje dowolny pojedynczy znak z wyjątkiem nowej linii. Użycie opcji m pozwala dopasować znak nowej linii.
  • [...]Dopasowuje dowolny pojedynczy znak w nawiasach.
  • [^ ...]Dopasowuje dowolny pojedynczy znak spoza nawiasów.
  • \ARozpocznij całą linię.
  • \zKoniec całej linii.
  • \ZKoniec całej linii z wyjątkiem końcowego terminatora linii.
  • re*Dopasowuje 0 lub więcej wystąpień poprzedniego wyrażenia.
  • re+Jedno lub więcej dopasowań poprzedniego wyrażenia.
  • re?Dopasowuje 0 lub 1 do lokalizacji poprzedniego wyrażenia.
  • re{n}Pasuje dokładnie N Liczba wystąpień poprzedniego wyrażenia.
  • re{n,}Dopasowuje N lub więcej wystąpień poprzedniego wyrażenia.
  • re{n, m}Dopasowuje co najmniej n i co najwyżej m wystąpień poprzedniego wyrażenia.
  • a|bPasuje do a lub b.
  • (re)Grupa wyrażeń regularnych i zapamiętywanie znalezionego tekstu.
  • (?: re)Grupy wyrażeń regularnych, które nie pamiętają znalezionego tekstu.
  • (?> re)Pasuje do niezależnego wzorca bez zwrotów.
  • \wDopasowuje litery i cyfry [a-zA-Z_0-9].
  • \WTo nie są litery ani cyfry.
  • \sDopasowuje spacje. Odpowiednik [\t\n\r\f].
  • \SNie białe znaki.
  • \dPasuje do liczb. Odpowiednik [0-9].
  • \DNie pasuje do liczb.
  • \GOdpowiada punktowi ostatniego meczu.
  • \nPasuje do nowej linii.
  • \bDopasowuje granicę słowa.
  • \BPasuje nie do granicy słowa.
  • \n, \t, etc.Nowa linia, powrót karetki, tabulator itp. znaki.
  • \QZacytuj wszystkie znaki przed \E.
  • \ECytat rozpoczynający się od \Q się kończy.
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION