Regular Expressions
Znaki kotwicy: Caret (^)
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 -
ckonsekwencja - h -
chkonsekwencja - a -
chakonsekwencja - 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:
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/mPython 2 i 3 (wbudowany moduł
re)abc_regex = re.compile("(?m)^abc"); abc_regex = re.compile("^abc", re.MULTILINE);