Rückverweise
Ein Rückverweis identifiziert die durch eine übereinstimmende Gruppe in einem regulären Ausdruck aufgezeichnete Teilzeichenfolge. Jeder Rückverweis wird durch eine Zahl oder einen Namen identifiziert. Es wird durch die Notation "\Zahl" oder "\k<Name>" darauf verwiesen. Wenn die Eingabezeichenfolge beispielsweise mehrere Vorkommen einer beliebigen Teilzeichenfolge enthält, können Sie das erste Vorkommen mit einer Aufzeichnungsgruppe abgleichen und dann die nachfolgenden Vorkommen der Teilzeichenfolge mithilfe eines Rückverweises abgleichen. Weitere Informationen finden Sie unter Rückverweiskonstrukte und Gruppierungskonstrukte.
Rückverweise sind ein komfortables Verfahren, um sich wiederholende Zeichengruppen zu finden. Sie können als eine Art Anweisung in Kurzschrift aufgefasst werden, die zur wiederholten Suche nach Übereinstimmungen mit derselben Zeichenfolge dient. Um beispielsweise doppelte benachbarte Zeichen wie die beiden Buchstaben "l" in "Ball" zu finden, wird der reguläre Ausdruck "(?<char>\w)\k<char>
" verwendet, wobei das Metazeichen "\w
" der Suche nach einem beliebigen Zeichen in einem Wort dient. Das Gruppierungskonstrukt "(?<char> )
" umschließt das Metazeichen, um das Suchmodul zu veranlassen, sich an eine Übereinstimmung mit einem Teilausdruck zu "erinnern" (in diesem Fall trifft das auf jedes beliebige Zeichen zu) und diese unter dem Namen "char" zu speichern. Das Rückverweiskonstrukt "\k<char>
" veranlasst das Modul, das aktuelle Zeichen mit dem zuvor gefundenen und unter "char" gespeicherten Zeichen zu vergleichen. Der gesamte reguläre Ausdruck findet immer dann eine Übereinstimmung, wenn ein Zeichen mit dem unmittelbar vorangegangenen übereinstimmt.
Zur Suche nach sich wiederholenden ganzen Wörtern können Sie den gruppierenden Teilausdruck so verändern, dass nach einer beliebigen Zeichenfolge gesucht wird, der ein Leerzeichen vorausgeht. Dazu ersetzen Sie das Metazeichen"\w
" durch den Teilausdruck "\w+
", der eine Übereinstimmung mit jeder Gruppe von Zeichen liefert, und verwenden das Metazeichen "\s
", um nach einem Leerzeichen vor der Zeichengruppe zu suchen. Dadurch erhalten Sie den regulären Ausdruck "(?<char>\s\w+)\k<char>
", mit dem alle sich wiederholenden Wörter wie "die die", aber auch andere Wiederholungen der angegebenen Zeichenfolge, z. B. "die Dienstleistung", gefunden werden.
Um festzulegen, dass die zweite Übereinstimmung nur an einem Wortanfang gefunden wird, fügen Sie das Metazeichen "\b
" nach der wiederholten Suchphrase ein. Daraus ergibt sich der reguläre Ausdruck "(?<char>\s\w+)\k<char>\b
", mit dem sich wiederholende Wörter gefunden werden, denen ein Leerraum vorausgeht.
Analysieren von Rückverweisen
Die Ausdrücke "\1
" bis "\9
" beziehen sich immer auf Rückverweise, niemals auf oktalen Code. Ausdrücke mit mehrstelligen Ziffern wie "\11
" oder größer werden als Rückverweise betrachtet, wenn einer Zahl ein Rückverweis zugeordnet ist. Andernfalls werden sie als oktaler Code interpretiert. (Ausnahme: Die erste Ziffer ist "8" oder "9". In diesem Fall werden die Zahlen als "8" und "9" behandelt.) Enthält ein regulärer Ausdruck einen Rückverweis auf eine undefinierte Gruppennummer, wird dies als Parserfehler gewertet. Falls Mehrdeutigkeit ein Problem darstellt, können Sie die Notation "\k<n>
" verwenden. Diese ist eindeutig und kann nicht zu einer Verwechslung mit einem oktalen Zeichencode führen. Auch hexadezimale Codes wie "\xdd
" sind unzweideutig und können nicht mit Rückverweisen verwechselt werden.
Das Verhalten bei Rückverweisen ändert sich etwas, wenn das ECMAScript-Optionsflag aktiviert ist. Weitere Informationen dazu finden Sie unter ECMAScript oder kanonisches Vergleichsverhalten .
Übereinstimmung mit Rückverweisen
Ein Rückverweis bezieht sich immer auf die aktuellste Definition einer Gruppe (die Definition, die bei der Suche von links nach rechts am weitesten links steht). Dies gilt insbesondere dann, wenn durch eine Gruppe mehrere Übereinstimmungen gefunden werden. Beispielsweise wird durch "(?<1>a)(?<1>\1b)*
" der Ausdruck "aababb" mit dem Suchmuster "(a)(ab)(abb)
" aufgezeichnet. Quantifizierer, die in Schleifen durchlaufen werden, löschen keine Gruppendefinitionen.
Wurde durch eine Gruppe keine Teilzeichenfolge gefunden, ist der Rückverweis auf diese Gruppe nicht definiert und führt niemals zu einem Suchergebnis. Ein Beispiel: Der Ausdruck "\1()
" führt niemals zu einer Übereinstimmung, der Ausdruck "()\1
" stimmt jedoch mit der leeren Zeichenfolge überein.