Wyraż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
a
do
z
włą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ć
matcher
tekst, wysyłając wiadomość na diagramie:
Matcher m = p.matcher(“code 2 learn java tutorial”);
UWAGA: Nie mamy też konstruktorów
Pattern
,
Matcher
tworzymy 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
Pattern
klasa,
Matcher
nie ma publicznych konstruktorów. Obiekt otrzymujesz
Matcher
poprzez wywołanie metody
matcher
na 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
RuntimeException
nie 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ć String
może StringBuffer
lub 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.
\A
Rozpocznij całą linię.
\z
Koniec całej linii.
\Z
Koniec 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|b
Pasuje 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.
\w
Dopasowuje litery i cyfry [a-zA-Z_0-9].
\W
To nie są litery ani cyfry.
\s
Dopasowuje spacje. Odpowiednik [\t\n\r\f].
\S
Nie białe znaki.
\d
Pasuje do liczb. Odpowiednik [0-9].
\D
Nie pasuje do liczb.
\G
Odpowiada punktowi ostatniego meczu.
\n
Pasuje do nowej linii.
\b
Dopasowuje granicę słowa.
\B
Pasuje nie do granicy słowa.
\n, \t, etc.
Nowa linia, powrót karetki, tabulator itp. znaki.
\Q
Zacytuj wszystkie znaki przed \E.
\E
Cytat rozpoczynający się od \Q się kończy.
GO TO FULL VERSION