home  |  suche  |  kontakt/johner  |  institut 
studierende  |  tech-docs  |  mindmailer 

Reguläre Ausdrücke

Ab Java 5 gibt es ein neues Package java.util.regex. Mit Hilfe dieses Package können Strings nach bestimmten Pattern ("Textmustern") durchsucht werde und diese auch ersetzen.

Für die Beschreibung von diesen Pattern stehen Zeichenklassen zur Verfügung:

  • \d - Ziffern
  • \D - Nicht-Ziffern
  • \w - Wortzeichen: 0-9, a-z, A-Z
  • \W - Nicht-Wortzeichen
  • \s - Whitespaces: Leerzeichen, Tabulator, Zeilenumbruch...
  • \S - Nicht-Whitespaces
  • \[] - Selbstdefinierte mit beliebigen Zeichen
  • (a|b) - entweder oder
  • . - beliebiges Zeichen

Diese Muster können auch wiederholt werden, dafür gibt es weitere vordefinierten Zeichen:

  • * - Vorstehendes Muster 0 oder mehrmals wiederholen
  • ? - Vorstehendes Muster 0 oder einmal wiederholen
  • + - Vorstehendes Muster 1 oder mehrmals wiederholen

Die Verwendung der Zeichenklassen und die Überprüfung eines String auf bestimmte Textmustern wird im folgenden Beispiel gezeigt.

package reggis;

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

public class StartReggy {
  public static void main(String[] args) {
    String text = new String("labe rlaberHTWG999laber");

    String regex = ".*HTWG\\d+.*";
    boolean stehtdrin = text.matches(regex);
    System.out.println("In unserem Text " + text + " ist >" + regex
        "< enthalten? " + stehtdrin);

    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(text);
    matcher.matches();
  }
}

Der String regex beschreibt ein Textmuster mit Hilfe der oben beschriebenen Zeichenklasse. In diesem Beispiel darf der String mit beliebigen und beliebig vielen Zeichen beginnen, auch kein Zeichen ist möglich. Anschließend muss die Zeichenkette "HTWG" mit mindestens einer Zahl im Anschluss folgen. Der Rest ist optional und es gibt keine Einschränkungen.

Nun gibt es die Möglichkeit den String text auf dieses Textmuster zu untersuchen. Dabei kann einfach die Methode machtes(String) auf der Klasse String aufgerufen werden, diese Methode liefert entweder true oder false. Eine andere Möglichkeit ist es die neuen Java-Klassen java.util.regex.Matcher und java.util.regex.Pattern zu nutzen. Mit der statischen Methode Pattern.compile(String textmuster) kann ein beschriebenes Pattern kompiliert. Diese Methode liefert ein Pattern zurück. Über dieses Objekt kann jetzt einfach die Methode matcher(String) aufgerufen werden. Der Vorteil hier ist, dass das Textmuster nur einmal kompiliert werden muss und bei langen Texten mehrere Textmuster überprüft werden können.

Soll das Ergebnis der Überprüfung als boolean zurückgegeben werden, kann über das Matcher Objekt (wird von der Methode machter(String) zurückgegeben) die Methode machtes() aufgerufen werden.