Anchor
Aktualisiert: November 2007
Bei den Beispielen in den vorherigen Themen in diesem Abschnitt ging es nur darum, Kapitelüberschriften zu finden. Jedes Vorkommen der Zeichenfolge "Chapter", gefolgt von einem Leerzeichen und einer Nummer, könnte eine tatsächliche Kapitelüberschrift oder ein Querverweis auf ein anderes Kapitel sein. Da echte Kapitelüberschriften stets am Anfang einer Zeile auftreten, kann es sinnvoll sein, eine Vorgehensweise dafür zu entwerfen, wie nur die echten Überschriften und nicht die Querverweise gefunden werden.
Funktionsweise von Anchorn
Diese Möglichkeit ist durch Anchor abgedeckt. Mit Anchorn können Sie einen regulären Ausdruck auf den Anfang oder das Ende einer Zeile fixieren. Sie können damit außerdem reguläre Ausdrücke erstellen, die innerhalb eines Wortes, am Anfang oder am Ende eines Wortes auftreten. Die folgende Tabelle listet die Anchor für reguläre Ausdrücke sowie deren Bedeutung auf:
Zeichen |
Beschreibung |
---|---|
^ |
Entspricht der Position am Anfang der Eingabezeichenfolge. Wenn die multiline-Eigenschaft des RegExp-Objekts gesetzt ist, entspricht ^ auch der Position, die auf '\n' oder '\r' folgt. |
$ |
Entspricht der Position am Ende der Eingabezeichenfolge. Wenn die multiline-Eigenschaft des RegExp-Objekts gesetzt ist, entspricht $ auch der Position vor '\n' oder '\r'. |
\b |
Entspricht einer Wortgrenze, d. h. der Position zwischen einem Wort und einem Leerzeichen. |
\B |
Entspricht einer anderen als einer Wortgrenze. |
Sie können einen Quantifizierer nicht zusammen mit einem Anchor verwenden. Da unmittelbar vor oder nach einem Zeilenende oder einer Wortgrenze nicht mehr als eine Position möglich ist, sind Ausdrücke wie ^* nicht zulässig.
Um eine Entsprechung für den Text am Beginn einer Textzeile zu finden, verwenden Sie das ^-Zeichen am Anfang des regulären Ausdrucks. Verwechseln Sie diese Verwendung des ^‑Zeichens nicht mit der Verwendung innerhalb eines Klammerausdrucks.
Um eine Entsprechung für den Text am Ende einer Textzeile zu finden, verwenden Sie das $-Zeichen am Ende des regulären Ausdrucks.
Wenn Sie beim Suchen nach Kapitelüberschriften Anchor verwenden möchten, entspricht der folgende reguläre Ausdruck einer Kapitelüberschrift, die nicht mehr als zwei folgende Ziffern enthält und am Anfang einer Zeile auftritt:
/^Chapter [1-9][0-9]{0,1}/
Eine echte Kapitelüberschrift steht nicht nur am Anfang einer Zeile, sondern ist auch der einzige Text in dieser Zeile. Sie steht am Anfang der Zeile sowie am Ende der gleichen Zeile. Der folgende Ausdruck gewährleistet, dass nur Kapitelüberschriften und keine Querverweise als Entsprechungen gefunden werden. Dies wird durch eine regulären Ausdruck erreicht, der Entsprechungen nur am Anfang und am Ende einer Textzeile sucht.
/^Chapter [1-9][0-9]{0,1}$/
Das Suchen von Entsprechungen für Wortgrenzen funktioniert etwas anders, erweitert die regulären Ausdrücke jedoch um wichtige Funktionen. Eine Wortgrenze ist die Position zwischen einem Wort und einem Leerzeichen. Eine Nichtwortgrenze ist jede beliebige andere Position. Der folgende Ausdruck entspricht den ersten drei Zeichen des Wortes Chapter, da die Zeichen auf eine Wortgrenze folgen:
/\bCha/
Die Position des \b-Operators ist entscheidend. Steht er am Anfang einer Zeichenfolge, für die Entsprechungen gesucht werden, sucht er am Anfang des Wortes nach der Entsprechung. Steht er am Ende der Zeichenfolge, sucht er am Ende des Wortes nach der Entsprechung. Der folgende Ausdruck entspricht z. B. der Zeichenfolge ter im Wort Chapter, da er vor einer Wortgrenze auftritt:
/ter\b/
Der folgende Ausdruck entspricht der Zeichenfolge apt, wie sie in Chapter vorkommt, jedoch nicht in aptitude:
/\Bapt/
Die Zeichenfolge apt tritt bei einer Nichtwortgrenze im Wort Chapter auf, aber bei einer Wortgrenze im Wort aptitude. Beim \B-Operator für Nichtwortgrenzen ist die Position nicht von Bedeutung, da die Entsprechung nicht relativ zum Anfang oder Ende eines Wortes behandelt wird.