Regular Expressions
Ankerzeichen: Caret (^)
Suche…
Bemerkungen
Terminologie
Das Caret-Zeichen (^) wird auch mit folgenden Begriffen bezeichnet:
- Hut
- Steuerung
- Aufwärtspfeil
- Chevron
- Akzent auf die Zirkulation
Verwendungszweck
Es hat zwei Verwendungsmöglichkeiten in regulären Ausdrücken:
- Bezeichnet den Zeilenanfang
- Wird es unmittelbar nach einer eckigen Klammer (
[^
) verwendet, negiert es die Menge der zulässigen Zeichen (dh[123]
bedeutet, dass das Zeichen 1, 2 oder 3 zulässig ist, während die Anweisung[^123]
jedes andere Zeichen als 1 bedeutet , 2 oder 3 ist erlaubt.
Zeichenflucht
Um ein Caret ohne besondere Bedeutung auszudrücken, sollte es durch einen Backslash vorangestellt werden. dh \^
.
Anfang der Zeile
Bei mehreren Leitungen (?m)
Modifier ausgeschaltet ist, ^
entspricht nur der Anfang der Eingabezeichenfolge:
Für die Regex
^He
Die folgenden Eingabezeichenfolgen stimmen überein:
-
Hedgehog\nFirst line\nLast line
-
Help me, please
-
He
Und die folgenden Eingabezeichenfolgen stimmen nicht überein:
-
First line\nHedgehog\nLast line
-
IHedgehog
-
Hedgehog
(aufgrund von Leerzeichen)
Wenn mit mehreren Leitungen (?m)
Modifikator eingeschaltet wird , ^
entspricht Anfang der jede Zeile:
^He
Das Obige würde mit jeder Eingabezeichenfolge übereinstimmen, die eine mit He
beginnende Zeile enthält.
Wenn Sie \n
als neues Zeilenzeichen betrachten, stimmen die folgenden Zeilen überein:
-
Hello
-
First line\nHedgehog\nLast line
(nur zweite Zeile) -
My\nText\nIs\nHere
(nur letzte Zeile)
Und die folgenden Eingabezeichenfolgen stimmen nicht überein:
-
Camden Hells Brewery
-
Helmet
(wegen Leerzeichen))
Leerzeilen mit ^
Ein anderer typischer Anwendungsfall für Caret ist das Abgleichen von Leerzeilen (oder eine leere Zeichenfolge, wenn der Mehrzeilenmodifikator deaktiviert ist).
Um eine leere Zeile abzugleichen (mehrzeilige Zeile ein ), wird ein Caret-Zeichen neben einem $
das ein anderes Ankerzeichen ist, das die Position am Zeilenende darstellt ( Ankerzeichen: Dollar ($) ). Daher entspricht der folgende reguläre Ausdruck einer leeren Zeile:
^$
Dem Caret-Charakter entkommen
Wenn Sie das Zeichen ^
in einer Zeichenklasse ( Zeichenklassen ) verwenden müssen, setzen Sie es entweder an einen anderen Ort als den Anfang der Klasse:
[12^3]
Oder entgehen Sie dem ^
mit einem umgekehrten Schrägstrich \
:
[\^123]
Wenn Sie das Caret-Zeichen außerhalb einer Zeichenklasse abgleichen möchten, müssen Sie es umgehen:
\^
Dies verhindert, dass das ^
Ankerzeichen interpretiert wird, das den Anfang der Zeichenfolge / Zeile darstellt.
Vergleich Anfang des Linienankers und Beginn des Schnurankers
Während viele Leute denken, dass ^
den Beginn einer Zeichenfolge bedeutet, bedeutet dies eigentlich den Beginn einer Zeile. Verwenden Sie für einen tatsächlichen Start des String-Ankers \A
Die Zeichenfolge hello\nworld
(oder deutlicher)
hello
world
Wäre durch die regulären Ausdrücke ^h
, ^w
und \Ah
, nicht aber durch \Aw
Multiline-Modifikator
Standardmäßig ist die caret ^
entspricht metacharacter die Position vor dem ersten Zeichen in der Zeichenkette.
In Anbetracht der Zeichenfolge " charsequence ", die auf die folgenden Muster angewendet wird: /^char/
& /^sequence/
, versucht die Engine wie folgt zu passen:
/^char/
- ^ -
Zeichenfolge
- c -
c
harsequenz - h -
ch
arsequenz - a -
cha
rsequenz - r -
char
Sequenz
Übereinstimmung gefunden
- ^ -
/^sequence/
- ^ -
Zeichenfolge
- s -
Zeichenfolge
Spiel nicht gefunden
- ^ -
Das gleiche Verhalten wird auch dann angewandt werden , wenn die Zeichenfolge enthält Leitungsabschlüsse, wie beispielsweise \r?\n
. Es wird nur die Position am Anfang der Zeichenfolge abgeglichen.
Zum Beispiel:
/^/g
┊char \ r \ n
\ r \ n
Sequenz
Wenn Sie jedoch nach jedem Zeilenabschlusszeichen eine Übereinstimmung herstellen müssen, müssen Sie den Multilinienmodus ( //m
, (?m)
) innerhalb Ihres Musters einstellen. Auf diese Weise stimmt das Caret ^
mit "dem Anfang jeder Zeile" überein, was der Position am Anfang der Zeichenkette und den Positionen unmittelbar nach 1 den Zeilenabschlüssen entspricht.
1 In einigen Versionen (Java, PCRE, ...) stimmt ^
nach dem Zeilenabschlusszeichen nicht überein, wenn das Zeilenendezeichen das letzte in der Zeichenfolge ist.
Zum Beispiel:
/^/gm
┊char \ r \ n
\ R \ n
Folge
Einige reguläre Ausdrücke, die den Mehrzeiligen-Modifikator unterstützen:
Pattern pattern = Pattern.compile("(?m)^abc"); Pattern pattern = Pattern.compile("^abc", Pattern.MULTILINE);
var abcRegex = new Regex("(?m)^abc"); var abdRegex = new Regex("^abc", RegexOptions.Multiline)
/(?m)^abc/ /^abc/m
Python 2 & 3 (eingebautes
re
Modul)abc_regex = re.compile("(?m)^abc"); abc_regex = re.compile("^abc", re.MULTILINE);