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:

  • Java

    Pattern pattern = Pattern.compile("(?m)^abc");
    Pattern pattern = Pattern.compile("^abc", Pattern.MULTILINE);
    
  • .NETZ

    var abcRegex = new Regex("(?m)^abc");
    var abdRegex = new Regex("^abc", RegexOptions.Multiline)
    
  • PCRE

    /(?m)^abc/
    /^abc/m
    
  • Python 2 & 3 (eingebautes re Modul)

    abc_regex = re.compile("(?m)^abc");
    abc_regex = re.compile("^abc", re.MULTILINE); 
    


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow