Regular Expressions
Personaggi di ancoraggio: Caret (^)
Ricerca…
Osservazioni
Terminologia
Il carattere Caret (^) viene anche definito dai seguenti termini:
- cappello
- controllo
- upArrow
- gallone
- accento circonflesso
uso
Ha due usi nelle espressioni regolari:
- Per indicare l'inizio della linea
- Se usato immediatamente dopo una parentesi quadra (
[^
) agisce per annullare l'insieme di caratteri consentiti (cioè[123]
significa che è consentito il carattere 1, 2 o 3, mentre l'istruzione[^123]
significa qualsiasi carattere diverso da 1 , 2 o 3 è permesso.
Carattere in fuga
Per esprimere un cursore senza un significato speciale, dovrebbe essere evaso precedendolo con un backslash; cioè \^
.
Inizio della linea
Quando il modificatore multi-linea (?m)
è disattivato , ^
corrisponde solo all'inizio della stringa di input:
Per la regex
^He
Le seguenti stringhe di input corrispondono:
-
Hedgehog\nFirst line\nLast line
-
Help me, please
-
He
E le seguenti stringhe di input non corrispondono:
-
First line\nHedgehog\nLast line
-
IHedgehog
-
Hedgehog
(a causa di spazi bianchi)
Quando la multi-linea (?m)
modificatore è acceso, ^
partite all'inizio di ogni riga:
^He
Quanto sopra corrisponderebbe a qualsiasi stringa di input che contiene una linea che inizia con He
.
Considerando \n
come il carattere della nuova riga, le seguenti righe corrispondono:
-
Hello
-
First line\nHedgehog\nLast line
(solo seconda riga) -
My\nText\nIs\nHere
(solo l'ultima riga)
E le seguenti stringhe di input non corrispondono:
-
Camden Hells Brewery
-
Helmet
(a causa di spazi bianchi)
Abbinare le linee vuote usando ^
Un altro tipico caso d'uso per l'accento circonflesso corrisponde alle linee vuote (o una stringa vuota se il modificatore multi-linea è disattivato).
Al fine di corrispondere una riga vuota (multi-line su), un accento circonflesso viene usato vicino ad un $
che è un altro personaggio ancora rappresenta la posizione alla fine della riga ( personaggi di ancoraggio: Dollar ($) ). Pertanto, la seguente espressione regolare corrisponderà a una riga vuota:
^$
Sfuggire al personaggio del caret
Se hai bisogno di usare il carattere ^
in una classe di caratteri ( classi di caratteri ), o mettilo da un'altra parte rispetto all'inizio della classe:
[12^3]
Oppure sfuggi al ^
usando una barra rovesciata \
:
[\^123]
Se vuoi abbinare il carattere di accento stesso al di fuori di una classe di caratteri, devi sfuggirgli:
\^
Ciò impedisce che ^
venga interpretato come il carattere di ancoraggio che rappresenta l'inizio della stringa / linea.
Inizio della linea di ancoraggio e inizio della stringa di ancoraggio
Mentre molte persone pensano che ^
significhi l'inizio di una stringa, in realtà significa l' inizio di una linea. Per un effettivo inizio di utilizzo di stringhe, \A
La stringa hello\nworld
(o più chiaramente)
hello
world
Verrebbero abbinati alle espressioni regolari ^h
, ^w
e \Ah
ma non da \Aw
Modificatore multilinea
Per impostazione predefinita, il segno di caret ^
metacarattere corrisponde alla posizione prima del primo carattere nella stringa.
Data la stringa " charsequence " applicata ai seguenti pattern: /^char/
& /^sequence/
, il motore proverà ad abbinare come segue:
/^char/
- ^ -
CharSequence
- c -
c
omissione - h -
ch
arsequence - a -
cha
rsequence - r - sequenza di
char
Corrispondenza trovata
- ^ -
/^sequence/
- ^ -
CharSequence
- s -
CharSequence
Partita non trovata
- ^ -
Lo stesso comportamento verrà applicato anche se la stringa contiene terminatori di riga , come \r?\n
Solo la posizione all'inizio della stringa verrà abbinata.
Per esempio:
/^/g
┊char \ r \ n
\ R \ n
sequenza
Tuttavia, se è necessario eseguire la corrispondenza dopo ogni terminatore di riga, sarà necessario impostare la modalità multilinea ( //m
, (?m)
) all'interno del modello. In tal modo, il cursore ^
corrisponderà "all'inizio di ogni riga", che corrisponde alla posizione all'inizio della stringa e alle posizioni immediatamente successive a 1 dei terminatori di riga.
1 In alcune versioni (Java, PCRE, ...), ^
non corrisponderà dopo il terminatore di riga, se il terminatore di riga è l'ultimo nella stringa.
Per esempio:
/^/gm
┊char \ r \ n
┊ \ r \ n
┊sequence
Alcuni dei motori di espressioni regolari che supportano il modificatore 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/m
Python 2 e 3 (modulo
re
incorporato)abc_regex = re.compile("(?m)^abc"); abc_regex = re.compile("^abc", re.MULTILINE);