Szukaj…


Uwagi

Terminologia

Do znaku Caret (^) odnoszą się również następujące terminy:

  • kapelusz
  • kontrola
  • strzałka w górę
  • szewron
  • akcent okrężny

Stosowanie

Ma dwa zastosowania w wyrażeniach regularnych:

  • Aby oznaczyć początek linii
  • Jeśli zostanie użyty natychmiast po nawiasie kwadratowym ( [^ ), działa to tak, aby negować zestaw dozwolonych znaków (tj. [123] oznacza, że znak 1, 2 lub 3 jest dozwolony, a wyrażenie [^123] oznacza dowolny znak inny niż 1 , 2 lub 3 jest dozwolone.

Ucieczka postaci

Aby wyrazić daszek bez specjalnego znaczenia, należy uciec, poprzedzając go odwrotnym ukośnikiem; tj. \^ .

Początek linii

Gdy modyfikator wielowierszowy (?m) jest wyłączony , ^ dopasowuje tylko początek ciągu wejściowego:

Dla wyrażenia regularnego

^He

Pasują następujące ciągi wejściowe:

  • Hedgehog\nFirst line\nLast line
  • Help me, please
  • He

I następujące ciągi wejściowe nie pasują:

  • First line\nHedgehog\nLast line
  • IHedgehog
  • Hedgehog (z powodu białych znaków )

Kiedy multi-line (?m) modyfikator jest włączona, ^ dopasowuje początek każdej linii jest:

^He

Powyższe pasowałoby do dowolnego ciągu wejściowego zawierającego linię rozpoczynającą się od He .

Biorąc pod uwagę \n jako nowy znak wiersza, pasują następujące wiersze:

  • Hello
  • First line\nHedgehog\nLast line (tylko druga linia)
  • My\nText\nIs\nHere (tylko ostatni wiersz)

I następujące ciągi wejściowe nie pasują:

  • Camden Hells Brewery
  • Helmet (z powodu białych znaków )

Dopasowywanie pustych linii za pomocą ^

Innym typowym przypadkiem użycia karetki jest dopasowanie pustych linii (lub pustego łańcucha, jeśli modyfikator wieloliniowy jest wyłączony).

Aby dopasować pustą linię (multi-line on ), obok $ jest używany znak karetki, który jest innym znakiem kotwicy reprezentującym pozycję na końcu linii ( Znaki kotwicy: Dolar ($) ). Dlatego następujące wyrażenie regularne będzie pasować do pustej linii:

 ^$

Ucieczka od znaku karetki

Jeśli chcesz użyć znaku ^ w klasie znaków (klasy postaci ), umieść go w innym miejscu niż początek klasy:

[12^3]

Lub ucieknij ^ używając ukośnika \ :

[\^123]

Jeśli chcesz dopasować samą postać karetki poza klasą postaci, musisz uciec od niej:

\^

Zapobiega to interpretacji ^ jako znaku kotwicy reprezentującego początek łańcucha / linii.

Porównanie początku kotwicy liniowej i początku kotwicy sznurkowej

Podczas gdy wiele osób uważa, że ^ oznacza początek łańcucha, tak naprawdę oznacza początek linii. Aby uzyskać rzeczywisty początek użycia kotwicy łańcuchowej, \A

Łańcuch hello\nworld (lub bardziej wyraźnie)

hello
world

Pasują do nich wyrażenia regularne ^h , ^w \Ah ale nie przez \Aw

Modyfikator wielowierszowy

Domyślnie metaznak daszka ^ dopasowuje pozycję przed pierwszym znakiem w ciągu.

Biorąc pod uwagę ciąg „ charsequence ” zastosowany wobec następujących wzorców: /^char/ & /^sequence/ , silnik będzie próbował dopasować w następujący sposób:

  • /^char/

    • ^ - charytatywność
    • c - c konsekwencja
    • h - ch konsekwencja
    • a - cha konsekwencja
    • r - sekwencja char

    Znaleziono dopasowanie

  • /^sequence/

    • ^ - charytatywność
    • s - charytatywność

    Nie znaleziono dopasowania

To samo zachowanie zostanie zastosowane, nawet jeśli ciąg znaków zawiera terminatory linii , takie jak \r?\n Dopasowana zostanie tylko pozycja na początku łańcucha.

Na przykład:

/^/g

\Char \ r \ n
\ r \ n
sekwencja

Jeśli jednak musisz dopasowywać po każdym zakończeniu linii, będziesz musiał ustawić tryb multilinii ( //m , (?m) ) w swoim wzorcu. W ten sposób kursor ^ dopasuje „początek każdej linii”, co odpowiada pozycji na początku łańcucha i pozycjom bezpośrednio po 1 zakończeniu linii.

1 W niektórych odmianach (Java, PCRE, ...) ^ nie będzie pasować za terminatorem linii, jeśli terminator linii jest ostatnim w ciągu.

Na przykład:

/^/gm

\Char \ r \ n
┊ \ r \ n
┊sekwencja

Niektóre z silników wyrażeń regularnych, które obsługują modyfikator Multiline:

  • Jawa

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

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

    /(?m)^abc/
    /^abc/m
    
  • Python 2 i 3 (wbudowany moduł re )

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


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow