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:

  • Giava

    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 e 3 (modulo re incorporato)

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


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow