Ein regulärer Ausdruck ist eine Art Muster, das auf Text angewendet werden kann (String, in Java). Java stellt das Paket
java.util.regex zum Abgleichen regulärer Ausdrücke bereit. Reguläre Ausdrücke sind der Programmiersprache Perl sehr ähnlich und sehr einfach zu erlernen. Ein regulärer Ausdruck stimmt entweder mit dem Text (einem Teil davon) überein oder nicht. * Wenn ein regulärer Ausdruck mit einem Textstück übereinstimmt, können wir ihn finden. ** Wenn der reguläre Ausdruck zusammengesetzt ist, können wir leicht herausfinden, welcher Teil des regulären Ausdrucks mit welchem Teil des Textes übereinstimmt.
Erstes Beispiel
Der reguläre Ausdruck „
[a-z] +
“ gleicht alle Kleinbuchstaben im Text ab.
[a-z]
bedeutet jedes Zeichen von
a
bis
z
einschließlich und
+
bedeutet „ein oder mehrere“ Zeichen. Nehmen wir an, wir liefern die Zeichenfolge „Code 2 Learn Java Tutorial“. So machen Sie das in Java Zuerst müssen Sie eine Vorlage erstellen:
import java.util.regex.*;
Pattern p = Pattern.compile(“[a-z]+”);
Als nächstes müssen Sie
matcher
den Text erstellen, indem Sie eine Nachricht an das Diagramm senden:
Matcher m = p.matcher(“code 2 learn java tutorial”);
HINWEIS: Beide haben keine Konstruktoren
Pattern
,
Matcher
wir erstellen sie mithilfe von Klassenmethoden
Pattern
.
Pattern Class:
Das Klassenobjekt stellt eine Darstellung eines regulären Ausdrucks dar. Die Pattern-Klasse stellt keine öffentlichen Konstruktoren bereit. Um eine Vorlage zu erstellen, müssen Sie zunächst eine der öffentlichen statischen Methoden aufrufen, die dann ein Objekt der Klasse zurückgeben
Pattern
. Diese Methoden verwenden einen regulären Ausdruck als Argument.
Matcher Class:
Das Finder-Objekt ist eine Engine, die das Muster interpretiert und Vergleichsvorgänge für die Eingabezeichenfolge durchführt. Wie
Pattern
eine Klasse
Matcher
hat sie keine öffentlichen Konstruktoren. Sie erhalten ein Objekt
Matcher
, indem Sie eine Methode
matcher
für ein Klassenobjekt aufrufen
Pattern
. Nachdem wir diese Schritte abgeschlossen haben und nun eine Instanz der Klasse haben
Matcher m
, können wir nun prüfen, ob das Muster gefunden wurde oder nicht, und wenn ja, an welcher Position usw.
m.matches()
Gibt true zurück, wenn das Muster mit der gesamten Zeichenfolge übereinstimmt, andernfalls false.
m.lookingAt()
Gibt true zurück, wenn das Muster mit dem Anfang der Zeichenfolge übereinstimmt, andernfalls false.
m.find ()
gibt true zurück, wenn das Muster mit einem beliebigen Teil des Textes übereinstimmt.
Eine Übereinstimmung finden
Nach einer erfolgreichen Übereinstimmung gibt
m.start() den Index des ersten übereinstimmenden Zeichens zurück und
m.end() gibt den Index des letzten übereinstimmenden Zeichens plus eins zurück. Wenn ein Versuch erfolglos war und keine Übereinstimmung gefunden wurde,
m.start()
wird
m.end()
gewürfelt
IllegalStateException
- So
RuntimeException
müssen Sie es nicht fangen.
Es mag seltsam erscheinen,
m.end()
den Index des letzten übereinstimmenden Zeichens plus eins zurückzugeben, aber genau das ist bei den meisten
String
.
- Zum Beispiel,
“Now is the time“.substring(m.start(), m.end())
wird die gleiche Zeichenfolge zurückgeben. Werfen wir einen Blick auf den Code:
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*
Zusätzliche Methoden
Wenn es eine Übereinstimmung gibt, dann:
m.replaceFirst(replacement)
gibt eine neue Zeichenfolge zurück, wobei die erste Teilzeichenfolge, die mit dem Muster übereinstimmt, durch ersetzt wirdreplacement
m.replaceAll(replacement)
gibt eine neue Zeichenfolge zurück, wobei jede Teilzeichenfolge, die mit dem Muster übereinstimmt, ersetzt wird
m.find(StartIndex)
Finden Sie die nächste Übereinstimmung beginnend am angegebenen Index
m.reset()
setzt die Vorlage zurück
m.reset(NewText)
Setzt den Finder zurück und gibt ihm einen neuen Text (vielleicht String
, StringBuffer
oder CharBuffer
)
Syntax für reguläre Ausdrücke
^
Entspricht dem Anfang einer Zeile.
$
Entspricht dem Ende der Zeichenfolge.
.
Entspricht jedem einzelnen Zeichen außer Newline. Die Verwendung der m-Option ermöglicht die Übereinstimmung mit einer neuen Zeile.
[...]
Entspricht einem beliebigen einzelnen Zeichen in Klammern.
[^ ...]
Entspricht jedem einzelnen Zeichen, das nicht in Klammern steht.
\A
Starten Sie die gesamte Zeile.
\z
Ende der gesamten Zeile.
\Z
Das Ende der gesamten Zeile mit Ausnahme des letzten Zeilenabschlusszeichens.
re*
Entspricht 0 oder mehr Vorkommen des vorhergehenden Ausdrucks.
re+
Eine oder mehrere Übereinstimmungen mit dem vorherigen Ausdruck.
re?
Entspricht 0 oder 1 der Position des vorherigen Ausdrucks.
re{n}
Entspricht genau N Die Anzahl der Vorkommen des vorhergehenden Ausdrucks.
re{n,}
Entspricht N oder mehr Vorkommen des vorhergehenden Ausdrucks.
re{n, m}
Entspricht mindestens n und höchstens m Vorkommen des vorherigen Ausdrucks.
a|b
Entspricht a oder b.
(re)
Eine Gruppe regulärer Ausdrücke und das Erinnern an den gefundenen Text.
(?: re)
Gruppen regulärer Ausdrücke, die sich den gefundenen Text nicht merken.
(?> re)
Entspricht einem unabhängigen Muster ohne Rückgabe.
\w
Entspricht Buchstaben und Zahlen [a-zA-Z_0-9].
\W
Dabei handelt es sich weder um Buchstaben noch um Zahlen.
\s
Entspricht Leerzeichen. Entspricht [\t\n\r\f].
\S
Keine Leerzeichen.
\d
Entspricht den Zahlen. Entspricht [0-9].
\D
Stimmt nicht mit den Zahlen überein.
\G
Entspricht dem Punkt des letzten Spiels.
\n
Entspricht dem Zeilenumbruch.
\b
Übereinstimmungen an einer Wortgrenze.
\B
Entspricht nicht einer Wortgrenze.
\n, \t, etc.
Zeilenumbruch, Wagenrücklauf, Tabulatorzeichen usw.
\Q
Zitieren Sie alle Zeichen vor \E.
\E
Das mit \Q begonnene Zitat endet.
GO TO FULL VERSION